Hi Vasu,

It is expected behavior, and you can control it with sortMissingLast and sortMissingFirst. Here is comment from schema:

<!-- sortMissingLast and sortMissingFirst attributes are optional attributes are currently supported on types that are sorted internally as strings and on numeric types. This includes "string","boolean", and, as of 3.5 (and 4.x), int, float, long, date, double, including the "Trie" variants. - If sortMissingLast="true", then a sort on this field will cause documents without the field to come after documents with the field, regardless of the requested sort order (asc or desc). - If sortMissingFirst="true", then a sort on this field will cause documents without the field to come before documents with the field, regardless of the requested sort order. - If sortMissingLast="false" and sortMissingFirst="false" (the default), then default lucene sorting will be used which places docs without the field first in an ascending sort and last in a descending sort. -->

In any case it does not seem right to me to have results first just because it is declared as French - in some cases it will be same as English version and will look strange. You should probably have to make sure all doc have values in all fields, either at indexing or query time.

HTH,
Emir

On 31.08.2016 08:07, Vasu Y wrote:
Hi,
  We are indexing a set objects with fields like objectName,
objectDescription etc. All the objects have objectName specified in English
language; some objects also have their name specified in an additional
language like French and indexed to objectName_fr field.

When we query from SOLR, we want to display objects sorted by objectName.
If the logged-in user's locale is French, we want to display french object
name for objects that have this and display english language name for rest
of the objects.

For sorting in ascending order, I specified: "objectName_collated_fr asc,
objectName_lowercase asc" in SOLR query. Here "objectName_lowercase" is of
field type "lowercase" (with KeywordTokenizerFactory &
LowerCaseFilterFactory) and "objectName_collated_fr" is of field type "
ICUCollationField" with locale="fr".

When sorting in ascending order, I noticed that all objects with English
only object names got displayed first and then those objects with English &
French names came at the end. I am assuming that the objects with English
only object names came first because these didn't have values for the
french field and treated equivalent to null/empty values for french field.

But when sort order is changed to descending (objectName_collated_fr desc,
objectName_lowercase desc), objects with English & French came first and
the objects; again the reason is same as the one mentioned above.

Let me know if this behavior is correct.

Thanks,
Vasu


--
Monitoring * Alerting * Anomaly Detection * Centralized Log Management
Solr & Elasticsearch Support * http://sematext.com/

Reply via email to