solr中长度大于3的索引词

时间:2017-10-06 13:20:32

标签: solr tokenize

我正在索引Solr(6.5版)中的大文本段落。

我只需要索引长度超过3个字符的字符(仅限字符)。但需要的数字索引。示例 - '问'和' as'不需要,但' 10'和' 101'需要。

实现此目的的一种方法是在stopwords.txt文件中采用所有可能的组合。

有人可以建议我更好的方法来实现这个目标吗?

1 个答案:

答案 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