我遇到了一个问题 - 如果响应中有大写和小写值,则需要按正确的字母顺序对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
如何正确排序?
答案 0 :(得分:1)
在99%的情况下,您不希望对标记化字段进行排序。因为当你最终得到5个代币时,你们中的哪一个是按什么排序?
但是,如果你想要小写,它可以是一个标记化字段,只有KeywordTokenizer和LowercaseFilter。这样你总是得到一个令牌,它是小写的。如果您仍想使用同义词等搜索原始字段,请使用原始字段中的copyField。不必存储副本,排序仅使用索引表示。
另外,docValues适合排序。