我是一个新的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,然后应用过滤器来删除小写标记,但我已查看了所有过滤器,但无法找到可以完成此操作的过滤器。
我是否需要为此编写自己的过滤器,或者有人对我有任何想法吗?谢谢!
答案 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>