use*_*116 1 java lucene concurrency
我的用户正在向我的应用程序提交文档,该文档更新索引,其他用户可以查询该索引.与爬网程序不同,索引是间歇性的 - 仅在用户提交文档时编制索引.我期望索引搜索比索引写操作更多.(我没有使用Solr,因为这对我的需求来说太过分了)并且没有删除或更新索引文档.
这是我将文档添加到索引并从索引中读取的代码.我该如何进一步优化它?
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();
}
Run Code Online (Sandbox Code Playgroud)
当搜索请求进入时,我创建一个新的IndexSearcher,如下所示
public IndexSearcher getIndexSearcher() throws CorruptIndexException, IOException {
IndexSearcher is= new IndexSearcher(IndexReader.open(directory, false));
return is;
}
Run Code Online (Sandbox Code Playgroud)
//然后我使用搜索器进行此处未显示的实际查询
Rob*_*uir 10
保持IndexWriters和IndexReader.不要打开新的编写器并关闭它只是为了添加单个文档.不要只是为了响应一个查询而打开新的阅读器,而是使用SearcherManager或NRTManager.
| 归档时间: |
|
| 查看次数: |
809 次 |
| 最近记录: |