我正在索引Solr(6.5版)中的大文本段落。
我只需要索引长度超过3个字符的字符(仅限字符)。但需要的数字索引。示例 - '问'和' as'不需要,但' 10'和' 101'需要。
实现此目的的一种方法是在stopwords.txt文件中采用所有可能的组合。
有人可以建议我更好的方法来实现这个目标吗?
答案 0 :(得分:1)
您可以在fieldType分析器中配置过滤器。
有一个模式过滤器可替换匹配的值。您可以用空值替换它们。像这样:
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory" />
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory" />
<filter class="solr.PatternReplaceFilterFactory" pattern="(\b[a-z]{1,3}\b)" replacement="" replace="all" />
</analyzer>
</fieldType>
也许您只需要更改模式以满足您的要求。
更新:我已更新模式。我猜这个(\ b [a-z] {1,3} \ b)应该可以解决这个问题。至少我已经测试了它here,它看起来对你的规则是正确的。 基本上这种模式只是抱怨大小为1到3的a-z字母的单词(这些单词将被忽略)
另外,我在PatternFilter之前添加了一个LowerCaseFilter和一个ASCIIFoldingFilter(你可能已经配置了),因此模式过滤器不需要抱怨大写和特殊字符。
如果您需要更多信息,请参阅以下有关过滤器的文档:https://lucene.apache.org/core/6_6_1/analyzers-common/org/apache/lucene/analysis/pattern/PatternReplaceCharFilter.html