问题
I have one field in solr schema.xml
<field name="short_name" type="text_general" indexed="true" stored="true" required="false" />
<field name="short_name_copy" type="string_ci" indexed="true" stored="true" required="false" />
<copyField source="short_name" dest="short_name_copy"/>
and field type
<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
and I have set sort field in my code
query.addSortField("short_name_copy", ORDER.asc);
But When I get search result its not sorted case insensitive. It gives all camel case result first and then all lower case
If I m having short names
Banu
Ajay
anil
sudhir
Nilesh
It sorts like Ajay, Banu, Nilesh, anil, sudhir
Can anybody please tell me whats wrong here
(My search field is short_name)
回答1:
This is because you are using your analyzer only in query time. To do what you want to do, you have to use something like:
<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
Or something like:
<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
来源:https://stackoverflow.com/questions/31745713/solr-case-insensitive-sort-not-working