Lucene QueryParser Analyzer不一致

时间:2014-06-17 15:32:56

标签: lucene analyzer query-parser

我有一个非常简单的 Analyzer ,它试图用空格替换正斜杠(/)。因为 QueryParser 强制我在解析之前使用斜杠转义字符串,所以我向分析器添加了 MappingCharFilter ,用单个空格替换“\ /”。分析仪定义如下:

@Override
protected TokenStreamComponents createComponents(String field, Reader in) {
    NormalizeCharMap.Builder builder = new NormalizeCharMap.Builder();
    builder.add("\\/", " ");
    Reader mappingFilter = new MappingCharFilter(builder.build(), in);

    Tokenizer tokenizer = new WhitespaceTokenizer(version, mappingFilter);
    return new TokenStreamComponents(tokenizer);
}

然后我在QueryParser中使用这个分析器来解析带有破折号的字符串:

String text = QueryParser.escape("one/two");
QueryParser parser = new QueryParser(Version.LUCENE_48, "f", new MyAnalyzer(Version.LUCENE_48));
System.err.println(parser.parse(text));

预期输出为

f:one f:two

但是,我得到了:

f:one/two

令人费解的是,当我调试分析器时,它会正确地标记输入字符串,返回两个令牌而不是一个。

发生了什么事?

感谢。

1 个答案:

答案 0 :(得分:0)

一个非常简单的修复。不要在builder.add方法的第一个参数中转义前斜杠字符。

builder.add("/", " ");