我有以下标记器:
<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]
我做错了什么?
答案 0 :(得分:0)
您可以检查是否可以使用空白过滤器工厂和字分隔符过滤器工厂。
我认为这应该可以解决你的问题。
在单词分隔符过滤器工厂中,您需要将属性生成单词部分设置为1.然后它将生成标记...例如... ...
输入就像Wi-Fi ......它会生成像wi,fi这样的标记。
在这里,您还可以通过设置另一个保留原始属性的属性来保留原始单词。
如果您只删除或替换了 - (连字符),那么您可以考虑上述情况。
如果您要求删除或替换许多其他字符,则可以考虑使用模式。
答案 1 :(得分:0)
正确的语法是:
<tokenizer class="solr.PatternTokenizerFactory" pattern="[-\s]"/>