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