如何创建一个删除小写令牌的Solr过滤器

时间:2014-07-01 23:00:07

标签: apache solr

我是一个新的Solr,但已经研究了大约一个星期而无法解决这个问题。非常感谢任何指导。

我的用例很简单:我想从字段中删除所有小写标记。我只想索引大写单词。

我已尝试使用tokenizer执行此操作(在我的schema.xml中):

<fieldType name="text_upper" class="solr.TextField" positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.PatternTokenizerFactory" pattern="\[A-Z\]\[A-Za-z\]" group="0"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
  </analyzer>
</fieldType>

但这导致没有令牌。

我真的很想使用&#34; solr.StandardTokenizerFactory&#34; tokenizer,然后应用过滤器来删除小写标记,但我已查看了所有过滤器,但无法找到可以完成此操作的过滤器。

我是否需要为此编写自己的过滤器,或者有人对我有任何想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

可能你需要使用PatternCaptureGroupFilterFactory而不是PatternTokenizerFactory

如果你看一下Solr的文档 https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.PatternTokenizerFactory

PatternTokenizerFactory用于分割输入字符串,所以基本上它用于匹配分隔符,而不是实际的标记。

如果你需要一个匹配/发出令牌的过滤器,我认为你应该使用PatternCaptureGroupFilterFactory

https://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.PatternCaptureGroupFilterFactory

因此,我将重新编写您的模式类型,如下所示

<fieldType name="text_upper" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.PatternCaptureGroupFilterFactory" pattern="([A-Z][A-Za-z]*)" preserve_original="false"/>
    </analyzer>
</fieldType>