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になる。

ええーーーー。議論読んでないんで、良く意味が分からない。。