solr case insensitive sort not working

时间:2015-07-31 12:02:17

标签: lucene

我在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"/>

和字段类型

<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
    <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

我在代码中设置了排序字段

query.addSortField("short_name_copy", ORDER.asc);

但是当我得到搜索结果时,它的排序不区分大小写。它首先给出所有驼峰案例结果,然后是所有小写

如果我有短名称

巴努

的Ajay

阿尼尔

的Sudhir

Nilesh制作

它像Ajay,Banu,Nilesh,anil,sudhir

一样

有人可以告诉我这里有什么不对吗

(我的搜索字段是short_name)

1 个答案:

答案 0 :(得分:4)

这是因为您仅在查询时使用分析仪。要做你想做的事,你必须使用类似的东西:

<fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
  <analyzer>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

或类似的东西:

<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>