solr case insensitive sort not working

偶尔善良 提交于 2020-01-11 06:44:06

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!