Java 如何加速并发Lucene应用程序?

Java 如何加速并发Lucene应用程序?,java,concurrency,lucene,Java,Concurrency,Lucene,我的用户正在向我的应用程序提交文档,该应用程序将更新索引,其他用户可以查询该索引。与爬虫不同,索引是间歇性的——只有在用户提交文档时才进行索引。我期望索引搜索比索引写入操作更多。(我没有使用Solr,因为这对我的需求来说是一种过度的需求)并且没有删除或更新索引文档 这是我的代码,用于将文档添加到索引并从索引中读取。如何进一步优化它 public void addDocument(Document doc) throws CorruptIndexException, LockObtainFaile

我的用户正在向我的应用程序提交文档,该应用程序将更新索引,其他用户可以查询该索引。与爬虫不同,索引是间歇性的——只有在用户提交文档时才进行索引。我期望索引搜索比索引写入操作更多。(我没有使用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();
}
当一个搜索请求进来时,我创建一个新的IndexSearcher,如下所示

public IndexSearcher getIndexSearcher() throws CorruptIndexException, IOException {

        IndexSearcher is= new IndexSearcher(IndexReader.open(directory, false));
        return is;
    }

//然后,我将搜索器用于此处未显示的实际查询

保留IndexWriter和IndexReader。不要仅仅为了添加一个文档而打开和关闭一个新的编写器。不要仅仅为了响应一个查询而打开一个新的读卡器,而是使用SearcherManager或NRTManager。

保留IndexWriter和IndexReader。不要仅仅为了添加一个文档而打开和关闭一个新的编写器。不要仅仅为了响应一个查询而打开一个新的读卡器,而是使用SearcherManager或NRTManager。

那么我应该为IndeWriter实例化一个singleton并在每次写入时重用它吗?如果我不关闭它,我如何确保写操作保存到索引中。@user193116:那么我应该为IndeWriter实例化一个单例并在每次写操作中重用它吗?如果不关闭它,如何确保写入内容保存到索引中。@user193116: