【问题标题】:solr PatternTokenizerFactory not splittingsolr PatternTokenizerFactory 不拆分
【发布时间】:2016-03-08 04:51:39
【问题描述】:

我有以下分词器:

<analyzer type="index">
   <charFilter class="solr.HTMLStripCharFilterFactory"/>
   <tokenizer class="solr.PatternTokenizerFactory" pattern="-|\\s+"/>
   <!-- more -->

当我进入我的 solr 服务器上的分析页面时,我可以看到有一个 PatternTokenizer,并且 PatternTokenizer 正在使用指定的模式。不幸的是,如果我分析一些简单的东西,比如:

1/2 test

PatternTokenizer 根本不拆分字符串,而是将其保留为一个字符串。 如何创建一个在空格或“-”上拆分的正则表达式?

solr 文档 (https://lucene.apache.org/core/4_1_0/analyzers-common/org/apache/lucene/analysis/pattern/PatternTokenizerFactory.html) 暗示我应该能够给 PatternTokenizerFactory 一个正则表达式,它会使用该正则表达式拆分文档。我检查了常规 Java 程序中的正则表达式:

import java.util.Arrays;

public class RegexTest {
    public static void main(String[] args){
        String test = "a     b c-d/e";
        String[] rs = test.split("-|\\s+");
        System.err.println(Arrays.toString(rs));
    }
}

并得到以下输出,这表明正则表达式没有任何问题。

[a, b, c, d/e]

我做错了什么?

【问题讨论】:

    标签: solr


    【解决方案1】:

    您可以检查是否可以使用空格过滤器工厂和单词分隔符过滤器工厂。

    我认为这应该可以解决您的问题。

    在word delimiter filter factory中,需要设置属性generate word part为1,然后生成tokens...比如...

    输入就像 Wi-Fi...它会生成像 wi、fi 这样的令牌。

    这里你也可以通过设置另一个保留原词的属性来保留原词。

    如果您只有 -(连字符)要删除或替换,那么您可以考虑以上内容。

    如果您需要删除或替换许多其他字符,那么可以考虑使用模式。

    【讨论】:

      【解决方案2】:

      正确的语法是:

      <tokenizer class="solr.PatternTokenizerFactory" pattern="[-\s]"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-28
        • 2015-04-12
        • 2011-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多