我是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-阿尔加威

您可以检查一下分析结果吗?

10-06 13:37
查看更多