我是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>
答案 0 :(得分:1)
如果要忽略特殊字符,请尝试使用以下字段类型 这样可以减少单词的大小写,并排除排除所有特殊字符的单词。
<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 - 'sAlgarve您可以查看分析。