2012-05-10 6 views
3

これら2つのコードの違いは何ですか? IndexReaderにディレクトリを使用してIndexSearcherルーネンでIndexReaderまたはIndexSearcherを使用してディレクトリを開く

Analyzer anal = new StandardAnalyzer(Version.LUCENE_30); 
QueryParser parser = new QueryParser(Version.LUCENE_30, "", anal); 
Query query = parser.parse(queryStr); 
Searcher searcher = new IndexSearcher(NIOFSDirectory.open(new File(indexDir))); 

で直接ディレクトリを使用して

を志向パフォーマンス指向およびドキュメントは、その読者に

Analyzer anal = new StandardAnalyzer(Version.LUCENE_30); 
QueryParser parser = new QueryParser(Version.LUCENE_30, "", anal); 
Query query = parser.parse(queryStr); 
IndexReader ir = IndexReader.open(NIOFSDirectory.open(new File(indexDir)), false); 
IndexSearcher searcherNew = new IndexSearcher(ir); 

答えて

6

を使用して探索を開くに基づいてIndexSearcherはIndexReaderの周りの軽量ラッパーです。 IndexSearcherコンストラクターan IndexReader will be open under the hoodsを使用しても、2つのスニペットから同じパフォーマンスが期待できます。

便利ですが、Directory上でIndexSearcherを直接開くのは悪い習慣です。さらに、このコンストラクタはLucene 3.5以降では非推奨です。

+0

ありがとうございます....非常に便利なリンク... – rrsk

+3

少し詳しく説明するために、IndexReaderを開くのはコストのかかる操作です。 IndexReaderを新しいIndexSearcherにラップするのは安価です。したがって、最適化のために、IndexReaderの再利用を注意深く管理する必要がありますが、必ずしもIndexSearchersを管理する必要はありません。 – Jegschemesch

関連する問題