Мои пользователи отправляют в мое приложение документ, который обновляет индекс, и другие пользователи могут запрашивать этот индекс. В отличие от сканеров, индексация является периодической - она индексируется только тогда, когда пользователь отправляет документ. Я ожидаю больше поисков индекса, чем операций записи индекса. (Я не использую 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;
}
// Затем я использую поисковик для фактических запросов, не показанных здесь