配置Solr以对值执行不区分大小写的排序

时间:2018-03-21 13:04:43

标签: sorting solr lucene case-insensitive

我有一个名为“customer”的字段名称包含以下值,

  1. Brooks Sports
  2. AM-记录
  3. 1elememt
  4. ALTAVISTA
  5. 阿迪达斯
  6. 3gdata
  7. 苹果
  8. BMW
  9. 7eleven
  10. bic corporation

    solr schema.xml中的customer字段

    <field docValues="true" indexed="true" multiValued="false" name="customer" stored="true" type="TextField"/>
    
  11. 我需要对上述客户值执行不区分大小写的排序。所以我可以得到如下数据,

    1. 1elememt
    2. 3gdata
    3. 7eleven
    4. 阿迪达斯
    5. ALTAVISTA
    6. AM-记录
    7. 苹果
    8. bic corporation
    9. BMW
    10. Brooks Sports
    11. 为此我创建一个名为“customer_sort”的新copyField scheme.xml中的字段

              <field docValues="true" indexed="true" multiValued="false" name="customer_sort" stored="false" type="LowerTextField"/>
      

      scheme.xml中的fieldType

              <fieldType name="LowerTextField" class="solr.TextField" sortMissingLast="true" positionIncrementGap="1000">
              <analyzer type="index">
                  <tokenizer class="solr.KeywordTokenizerFactory"/>
                  <filter class="solr.LowerCaseFilterFactory"/>
      
              </analyzer>
              <analyzer type="query">
                  <tokenizer class="solr.KeywordTokenizerFactory"/>
                  <filter class="solr.LowerCaseFilterFactory"/>
              </analyzer>
          </fieldType>
      

      scheme.xml中的copyfield

      <copyField source="customer" dest="customer_sort"/>
      

      目前的排序结果是

      1. 1elememt
      2. 3gdata
      3. 7eleven
      4. ALTAVISTA
      5. AM-记录
      6. 阿迪达斯
      7. 苹果
      8. BMW
      9. Brooks Sports
      10. bic corporation
      11. 根据ascii值进行排序。即(A然后a,B然后b,......)。

        当我尝试使用alphaOnlySort时也是如此。

        任何人都能告诉我我错过了什么吗?

        谢谢

2 个答案:

答案 0 :(得分:0)

@MatsLindh请找到Solr_queryanalyzer_screen looks like

的图片

答案 1 :(得分:0)

您可以在schema.xml中使用它吗?您还提到了 type =&#34; TextField&#34; 。我想了解这一点。

<fieldType name="LowerTextField" class="solr.TextField" sortMissingLast="true" positionIncrementGap="1000">
<analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>