【问题标题】:Index words whose length more than 3 in solrsolr中长度大于3的索引词
【发布时间】:2017-10-06 13:20:32
【问题描述】:

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

我只需要索引长度超过 3 个字符(仅字符)的单词。但是需要对数字进行索引。示例 - 不需要“ask”和“as”,但需要“10”和“101”。

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

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

【问题讨论】:

    标签: solr tokenize


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

    【讨论】:

    • 这将替换 a-z0-9 之外的任何字符,而不考虑单词/标记的长度 - 这就是问题所在。提问者想要删除所有短于四个字符的 tokens,但如果 token 是数字则不需要。您可以改用^[^0-9]{1,3}$ 来修改它 - 仅取决于索引或查询和索引的用例。
    • 提问者想要一种更好的方法来忽略基于特定规则的某些标记,这就是我给他的。正如答案中所说,他只需要调整模式以满足他的规则。我不是正则表达式的专家,但另一个人或他自己可以正确地得到那个部分。与此同时,我也在四处寻找。
    猜你喜欢
    • 2015-11-25
    • 2019-01-11
    • 2019-10-30
    • 1970-01-01
    • 2017-04-21
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多