solr PatternTokenizerFactory不分裂

时间:2016-03-04 21:31:49

标签: solr

我有以下标记器:

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

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

1/2 test

PatternTokenizer根本不拆分字符串,而是将其保留为一个字符串。 如何制作一个将在空格或&#34; - &#34; - &#34;?

上拆分的正则表达式

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]

我做错了什么?

2 个答案:

答案 0 :(得分:0)

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

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

在单词分隔符过滤器工厂中,您需要将属性生成单词部分设置为1.然后它将生成标记...例如... ...

输入就像Wi-Fi ......它会生成像wi,fi这样的标记。

在这里,您还可以通过设置另一个保留原始属性的属性来保留原始单词。

如果您只删除或替换了 - (连字符),那么您可以考虑上述情况。

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

答案 1 :(得分:0)

正确的语法是:

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