Performance 在lucene中通过IndexReader或IndexSearcher?打开目录

Performance 在lucene中通过IndexReader或IndexSearcher?打开目录,performance,lucene,Performance,Lucene,这两种代码之间有什么区别?基于性能导向和文档导向 直接在索引搜索器中使用目录 Analyzer anal = new StandardAnalyzer(Version.LUCENE_30); QueryParser parser = new QueryParser(Version.LUCENE_30, "", anal); Query query = parser.parse(queryStr); Searcher searcher = new IndexSearcher(NIOFSDirect

这两种代码之间有什么区别?基于性能导向和文档导向

直接在
索引搜索器中使用目录

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)));
使用
IndexReader
中的目录,然后使用该阅读器打开搜索程序

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);

IndexSearcher是围绕IndexReader的轻量级包装器。即使使用IndexSearcher构造函数,也可以从两个代码段中获得相同的性能


尽管很方便,但在目录上直接打开IndexSearcher是一种不好的做法。此外,自Lucene 3.5以来,此构造函数已被弃用。

更详细地说,打开IndexReader是一项代价高昂的操作。用新的IndexSearcher包装IndexReader是很便宜的。因此,为了优化,您需要仔细管理IndexReader的重用,但不一定是IndexSearcher。