내 사용자가 내 응용 프로그램에 문서를 제출하여 색인을 업데이트하고 다른 사용자가 해당 색인을 쿼리 할 수 있습니다. 크롤러와 달리 색인 생성은 간헐적이며 사용자가 문서를 제출할 때 색인으로 만 사용됩니다. 인덱스 작성 작업보다 더 많은 인덱스 검색이 필요합니다. (필자는 Solr을 사용하지 않고있다. 필자의 필요를 과도하게 생각하기 때문이다.) 그리고 인덱싱 된 문서를 삭제하거나 업데이트하지 않는다.동시 Lucene 응용 프로그램의 속도를 높이려면 어떻게해야합니까?
이것은 색인에 문서를 추가하고 색인에서 읽기위한 코드입니다. 어떻게 최적화 할 수 있습니까?
public IndexSearcher getIndexSearcher() throws CorruptIndexException, IOException {
IndexSearcher is= new IndexSearcher(IndexReader.open(directory, false));
return is;
}
을 다음과 같이
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();
}
검색 요청이 들어 오면
, 나는 그때
그래서 IndeWriter에 대한 싱글 톤을 인스턴스화하고 그 때마다 다시 사용해야합니까? 닫지 않으면 쓰기가 색인에 저장되도록하려면 어떻게해야합니까? – user193116
@ user193116 : http://blog.mikemccandless.com/2011/11/near-real-time-readers-with-lucenes.html – Xodarap