【问题标题】:How to create a Solr filter that removes lowercase tokens如何创建删除小写标记的 Solr 过滤器
【发布时间】:2014-07-01 23:00:06
【问题描述】:

我是 Solr 的新手,但已经研究了大约一个星期,但无法弄清楚。非常感谢任何指导。

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

我曾尝试使用标记器来执行此操作(在我的 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>

但这导致没有令牌。

我真的很想只使用“solr.StandardTokenizerFactory”标记器,然后应用过滤器来删除小写标记,但我查看了所有过滤器,但找不到可以完成此操作的过滤器。

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

【问题讨论】:

  • 您能否提供一个小示例文本,它在处理之前的外观和处理后的外观?我不确定我是否正确。

标签: apache solr


【解决方案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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    相关资源
    最近更新 更多