美元符号PatternReplaceFilterFactory

时间:2012-09-14 12:47:36

标签: regex search solr sunspot

在Solr我希望“a $ ap”找到“asap”以及“a $ ap”。为此,我将其添加到schema.xml中的索引和查询分析器并重新编制索引:

<filter class="solr.PatternReplaceFilterFactory" pattern="$" replacement="s"/>

但是,“$ ap”只返回“a $ ap”而“asap”只返回“asap”。这可能是一些愚蠢的语法,但我不知道出了什么问题!

2 个答案:

答案 0 :(得分:1)

你应该逃避$,因为它是正则表达式的特殊字符,意味着结束。

使用: -

    <fieldType name="test" class="solr.TextField" sortMissingLast="true" omitNorms="true">
      <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory" />
        <filter class="solr.PatternReplaceFilterFactory" pattern="\$" replacement="s" replace="all" />
      </analyzer>
    </fieldType>

上述字段完全取代了它。

答案 1 :(得分:0)

最后我用MappingCharFilterFactory修复了它。

我将其添加到索引和查询分析器中:

<charFilter class="solr.MappingCharFilterFactory" mapping="mapping.txt"/>

其中mapping.txt看起来像这样:

"$" => "s"

重新编制索引之后就行了!