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/