在SoLR中对具有特殊字符的字段进行排序

时间:2011-09-23 12:10:20

标签: java solr solrnet

我是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>

1 个答案:

答案 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
LCF - 'salgarve
PRF - 阿尔加维
WDF - 阿尔加维

您可以查看分析。