我有一个非常简单的分析器,它试图用空格替换正斜杠 (/)。因为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
令人费解的是,当我调试分析器时,它正确地标记了输入字符串,返回两个标记而不是一个。
到底是怎么回事?
谢谢。