我是 SoLR 索引方面的新手。 我想对具有不同值的位置字段进行排序。它还包含以 'sAmerica、#'Japan、%India 等开头的值。
现在,当我对此字段进行排序时,我确实想考虑特殊字符,例如 's、'#、!、~ 等。 我想要排序,它将忽略这个字符并返回类似的结果 美国排名第一,%印度排名第二,#'日本排名第三。
如何让它成为可能?我正在使用 PatternReplaceFilterFactory,但不知道这一点。
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory" catenateWords="1" />
<filter class="solr.PatternReplaceFilterFactory" pattern="'s" replacement="" replace="all" />
</analyzer>
</fieldType>
最佳答案
如果您想忽略特殊字符,请尝试使用以下字段类型。
这将小写单词并连接单词,排除所有特殊字符。
<fieldType name="string_sort" class="solr.TextField" positionIncrementGap="1">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.WordDelimiterFilterFactory" catenateWords="1" />
</analyzer>
</fieldType>
但是,这对于 'sAmerica 不起作用,因为 s 不是特殊字符。
<filter class="solr.PatternReplaceFilterFactory" pattern="'s" replacement="" replace="all" />
如果这是固定模式,您需要将其替换为上面的单词分隔符之前。
编辑 - 您使用此配置吗?
<fieldType name="string_sort" class="solr.TextField" positionIncrementGap="1">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory" pattern="'s" replacement="" replace="all" />
<filter class="solr.WordDelimiterFilterFactory" catenateWords="1" />
</analyzer>
</fieldType>
通过分析测试了以下内容,并生成了以下标记 -
KT - 阿尔加维
LCF-'萨尔加维
PRF - 阿尔加维
WDF - 阿尔加维
你能检查一下分析吗?
关于java - SoLR 中具有特殊字符的字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7528723/