2012-05-10 46 views
3

這兩個代碼有什麼區別?基於性能取向和文檔使用目錄定向在lucene中通過IndexReader或IndexSearcher打開目錄

直接在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然後打開搜索器是圍繞的IndexReader輕質包裝。即使您使用IndexSearcher構造函數an IndexReader will be open under the hoods,也可以從兩個片段中獲得相同的性能。

儘管可以很方便,但通過目錄直接打開IndexSearcher是一種不好的做法。此外,從Lucene 3.5開始,這個構造函數已經被棄用了。

+0

非常感謝....非常有用的鏈接... – rrsk

+3

爲了闡述一下,打開IndexReader是一個代價高昂的操作。在新的IndexSearcher中包裝IndexReader很便宜。因此,爲了優化,您需要認真管理IndexReader的重用,但不一定需要IndexSearchers。 – Jegschemesch

相關問題