Search without Scoring

Lucene で検索結果のスコアリングを省くテクニック。
普通の検索は IndexSearcher.search(Query) を使うが、スコアリングがいらない場合は Filter と IndexReader を使って BitSet を取得する。こんな感じ。

IndexReader reader = IndexReader.open(indexPath);
try {
    QueryParser parser = new QueryParser(fieldName, new StandardAnalyzer());
    Filter filter = new QueryFilter(parser.parse(query));
    BitSet set = filter.bits(reader);
    for (int i = set.nextSetBit(0); i >= 0; i = set.nextSetBit(i + 1)) {
        Document doc = reader.document(i);
        System.out.println(doc.get(fieldName));
    }
} finally {
    reader.close();
}

検索結果の件数が多くなるときは結構パフォーマンスの向上の寄与するんじゃないかな。比べてないけど。