の使用順序を台無し私は、以下に示すようCustomAnalyzer
を使用してクエリを解析するためのLucene 6.0.0でorg.apache.lucene.queryparser.classic.QueryParser
を使用しています:QueryParserがPatternReplaceCharFilter
public static void testFilmAnalyzer() throws IOException, ParseException {
CustomAnalyzer nameAnalyzer = CustomAnalyzer.builder()
.addCharFilter("patternreplace",
"pattern", "(movie|film|picture).*",
"replacement", "")
.withTokenizer("standard")
.build();
QueryParser qp = new QueryParser("name", nameAnalyzer);
qp.setDefaultOperator(QueryParser.Operator.AND);
String[] strs = {"avatar film fiction", "avatar-film fiction", "avatar-film-fiction"};
for (String str : strs) {
System.out.println("Analyzing \"" + str + "\":");
showTokens(str, nameAnalyzer);
Query q = qp.parse(str);
System.out.println("Parsed query of \"" + str + "\":");
System.out.println(q + "\n");
}
}
private static void showTokens(String text, Analyzer analyzer) throws IOException {
StringReader reader = new StringReader(text);
TokenStream stream = analyzer.tokenStream("name", reader);
CharTermAttribute term = stream.addAttribute(CharTermAttribute.class);
stream.reset();
while (stream.incrementToken()) {
System.out.print("[" + term.toString() + "]");
}
stream.close();
System.out.println();
}
私はtestFilmAnalyzer
を起動したときに、私は、次のような出力が得られます。
Analyzing "avatar film fiction":
[avatar]
Parsed query of "avatar film fiction":
+name:avatar +name:fiction
Analyzing "avatar-film fiction":
[avatar]
Parsed query of "avatar-film fiction":
+name:avatar +name:fiction
Analyzing "avatar-film-fiction":
[avatar]
Parsed query of "avatar-film-fiction":
name:avatar
QueryParser
がそう後で行いながらアナライザは、(つまり、トークン化の前に)その正しい意図した順序でPatternReplaceCharFilter
を使用するように思えます。誰かがそれについての説明を持っていますか?それはバグじゃない?