代码之家  ›  专栏  ›  技术社区  ›  kouign_amann

使用Solr按字母顺序对字符串排序

  •  1
  • kouign_amann  · 技术社区  · 7 年前

    上下文

    “title”有一个字符串字段,我想按字母顺序排序。我使用Solr 4.10.2进行搜索和排序。由于strFields默认区分大小写,我注意到Solr是通过ASCII排序(大写字母优先于小写字母)而不是按字母顺序对标题进行排序的。

    当前行为(asc排序)

    数学:代数导论

    数学:导论

    欲望行为(asc排序)

    数学:导论

    数学:代数导论

    架构中的代码。xml

    <fieldType name="string_ci" class="solr.TextField" sortMissingLast="true" omitNorms="true">
      <analyzer type="query">
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>
    
    <field name="string" stored="false" type="string_ci" multiValued="false" indexed="true"/>
    

    即使在重新启动Solr、重新编制索引后,排序仍然是ASCII排序

    1 回复  |  直到 7 年前
        1
  •  1
  •   EricLavault    7 年前

    该字段在索引时必须小写。

    移除 type 属性,以便它同时适用于索引和查询:

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

    如果要为每个阶段使用不同的分析器,请包括两个 <analyzer> 与type属性区分的定义 "index" "query" .