我是SoLR索引的新手。
我想对具有不同值的位置字段进行排序。它还包含以'sAmerica,#'Japan,%India等开头的值。
现在,当我对该字段进行排序时,我确实要考虑特殊字符,例如','#,!,〜等。
我想排序将忽略此字符并返回类似的结果
美国排名第一,印度排名第二,日本排名第三。
如何使其成为可能?我正在使用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-'salgarve
PRF-阿尔加威
WDF-阿尔加威
您可以检查一下分析结果吗?