【发布时间】:2017-10-06 13:20:32
【问题描述】:
我正在为 Solr(6.5 版)中的大型文本段落编制索引。
我只需要索引长度超过 3 个字符(仅字符)的单词。但是需要对数字进行索引。示例 - 不需要“ask”和“as”,但需要“10”和“101”。
实现此目的的一种方法是在 stopwords.txt 文件中采用所有可能的组合。
有人可以建议我一个更好的方法来实现这一点吗?
【问题讨论】:
我正在为 Solr(6.5 版)中的大型文本段落编制索引。
我只需要索引长度超过 3 个字符(仅字符)的单词。但是需要对数字进行索引。示例 - 不需要“ask”和“as”,但需要“10”和“101”。
实现此目的的一种方法是在 stopwords.txt 文件中采用所有可能的组合。
有人可以建议我一个更好的方法来实现这一点吗?
【问题讨论】:
您可以在 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
【讨论】:
^[^0-9]{1,3}$ 来修改它 - 仅取决于索引或查询和索引的用例。