0
我的用户正在向我的应用程序提交文档,该应用程序更新索引,其他用户可以查询该索引。与抓取工具不同,索引是间歇性的 - 只有在用户提交文档时才会索引。我期望比索引写入操作更多的索引搜索。 (我没有使用Solr,因为这对我的需求是一种矫枉过正),也没有删除或更新索引文档。如何加快并发Lucene应用程序的速度?
这是我将代码添加到索引和从索引读取的代码。我如何进一步优化它?
public void addDocument(Document doc) throws CorruptIndexException, LockObtainFailedException, IOException{
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_35, new StandardAnalyzer(Version.LUCENE_35)).setIndexDeletionPolicy(NoDeletionPolicy.INSTANCE).setRAMBufferSizeMB(256.0);
TieredMergePolicy tmp = new TieredMergePolicy();
tmp.setUseCompoundFile(false);
tmp.setMaxMergedSegmentMB(1000000.0);
//tmp.setReclaimDeletesWeight(3.0);
//tmp.setMaxMergedSegmentMB(7000.0);
iwc.setMergePolicy(tmp);
// Make sure merges run @ higher prio than indexing:
final ConcurrentMergeScheduler cms = (ConcurrentMergeScheduler) iwc.getMergeScheduler();
cms.setMergeThreadPriority(Thread.currentThread().getPriority() + 2);
cms.setMaxThreadCount(1);
cms.setMaxMergeCount(4);
IndexWriter iw = new IndexWriter(directory, iwc);
iw.addDocument(doc);
iw.close();
}
当一个搜索请求时,我创建了一个新IndexSearcher的如下
public IndexSearcher getIndexSearcher() throws CorruptIndexException, IOException {
IndexSearcher is= new IndexSearcher(IndexReader.open(directory, false));
return is;
}
//然后我用这里没有显示实际查询搜索
那么我应该为IndeWriter实例化一个单例,并在每次写入时重用它?如果我没有关闭它,我怎么确保写入被保存到索引。 – user193116 2012-03-04 19:54:32
@ user193116:http://blog.mikemccandless.com/2011/11/near-real-time-readers-with-lucenes.html – Xodarap 2012-03-04 23:07:48