Lucene3.1でのQueryParserの挙動変更
デフォルトでPhraseQueryを生成しなくなったQueryParserに注意(3.1)を読んで意味が分からなかったので、プログラムを実行してみた
public class TestLucene2458 { static final Version V = Version.LUCENE_31; public static void main(String args[]) throws CorruptIndexException, IOException, ParseException { Directory directory = createIndex(); IndexSearcher searcher = new IndexSearcher(directory); QueryParser qp = new QueryParser(V, "F", new CJKAnalyzer(V)); Query query = qp.parse("あいえお"); TopDocs docs = searcher.search(query, 5); System.out.println(docs.totalHits); } private static Directory createIndex() throws CorruptIndexException, IOException { Directory directory = new RAMDirectory(); Analyzer analyzer = new CJKAnalyzer(V); MaxFieldLength maxlen = new MaxFieldLength(100); IndexWriter writer = new IndexWriter(directory, analyzer, true, maxlen); Document doc = new Document(); doc.add(new Field("F", "あいうえお", Field.Store.YES, Field.Index.ANALYZED)); writer.addDocument(doc); writer.close(); return directory; } }
ようするに、"あいうえお"というドキュメントにたいして"あいえお"で検索している。なんと、これがhitする。
1
qp.setAutoGeneratePhraseQueries(true);
を入れると0になる。
ええーーーー。議論読んでないんで、良く意味が分からない。。