0
我有一個非常簡單的分析儀,它試圖用空格替換正斜槓(/)。因爲QueryParser強制我在解析之前使用斜槓轉義字符串,所以我添加了MappingCharFilter到分析器,該分析器用一個空格替換「\ /」。所述分析器被定義如下:Lucene QueryParser分析儀不一致性
@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
令人費解的是,當我調試分析器時,它會正確標記輸入字符串,返回兩個令牌而不是一個。
這是怎麼回事?
謝謝。
只是讓你知道,查詢分析器將治療儀之前的文本會,所以衝在F:在最好的情況下,「富巴」:富/棒填充大概在短語查詢,如F結束通過從查詢解析器令牌獲取多個分析器令牌,可以實現這種情況 –