Solr按正确的字母顺序排序

时间:2016-07-15 10:54:06

标签: sorting solr

我遇到了一个问题 - 如果响应中有大写和小写值,则需要按正确的字母顺序对SOLR结果进行排序。 现在,使用

<field name="somefield"  type="text_general"  indexed="true"  stored="true"/> 

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
    <!-- in this example, we will only use synonyms at query time
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
    -->
    <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>
</fieldType>

我可以像这样轻松搞笑

aaa
AAA
BBB
bbb
BBB
DDD
ddd

就像大写和小写字母之间没有优先权一样。

但它需要这样:

aaa
AAA
bbb
BBB
BBB
ddd
DDD

如何正确排序?

1 个答案:

答案 0 :(得分:1)

在99%的情况下,您不希望对标记化字段进行排序。因为当你最终得到5个代币时,你们中的哪一个是按什么排序?

但是,如果你想要小写,它可以是一个标记化字段,只有KeywordTokenizer和LowercaseFilter。这样你总是得到一个令牌,它是小写的。如果您仍想使用同义词等搜索原始字段,请使用原始字段中的copyField。不必存储副本,排序仅使用索引表示。

另外,docValues适合排序。