solr PatternTokenizerFactory未拆分

solr PatternTokenizerFactory未拆分,solr,Solr,我有以下标记器: <analyzer type="index"> <charFilter class="solr.HTMLStripCharFilterFactory"/> <tokenizer class="solr.PatternTokenizerFactory" pattern="-|\\s+"/> <!-- more --> PatternTokenizer根本不分割字符串,而是将其作为一个字符串保留如何生成以空格或“-

我有以下标记器:

<analyzer type="index">
   <charFilter class="solr.HTMLStripCharFilterFactory"/>
   <tokenizer class="solr.PatternTokenizerFactory" pattern="-|\\s+"/>
   <!-- more -->
PatternTokenizer根本不分割字符串,而是将其作为一个字符串保留如何生成以空格或“-”分隔的正则表达式?

solr文档()意味着我应该能够为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]

我做错了什么?

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

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

在word delimiter筛选器工厂中,需要将属性generate word part设置为1。然后它会生成代币。。。比如说

输入就像Wi-Fi…它将生成Wi-Fi之类的令牌

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

如果只有-(连字符)需要删除或替换,则可以考虑上述内容

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

正确的语法是:

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

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