I assign a custom “popularity” score for each document in my Solr database. I want search results to be ordered by this custom “score” field rather than the built-in relevancy score that is the default.
First I define my score field:
<fieldType name="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/>
<field name="score" type="sint" stored="true" multiValued="false" />
Then I rebuild the index, inserting a score for each document.
To run a query, I use something like this:
(text:hello)+_val_:"score"
Now I would expect the documents to come back sorted by the “score” field, but what I get instead is:
<doc>
<int name="score">566</int>
<str name="text">SF - You lost me at hello...</str>
</doc>
<doc>
<int name="score">41</int>
<str name="text">hello</str>
</doc>
<doc>
<int name="score">77</int>
<str name="text">
CAGE PAGE-SAY HELLO (MIKE GOLDEN's Life Is Bass Remix)-VIM
</str>
</doc>
<doc>
<int name="score">0</int>
<str name="text">Hello Hello Hello</str>
</doc>
Notice that the scores come back out of order: 566, 41, 77, 0. The weird thing is that it only sorts this way with certain queries. I’m not sure what the pattern is, but so far I’ve only see the bad sorting when scores of “0” come back in the search results.
I’ve tried IntField instead of SortableIntField, and I’ve tried putting “sort=score desc” as a query parameter, with no change in behavior.
Am I doing something wrong, or just misunderstanding the meaning of using val:”score” in my query?
EDIT: I tried renaming the “score” field to “popularity” and got the same result.
score field is used by Solr internally, so may be its not a good practice to define a field with the same field name.
you can try defining a field with different field name and both the options you mentioned should work fine.
Edit – This is what i have and works fine (Solr 3.3)
Schema –
Field Type –
Field –
Data –
Query –
Results :-