玩弄Lucene。試圖讓我的更改對其他閱讀主題可見。沒有重建索引。爲此,我使用SearcherManager類。Java Lucene NRT搜索不起作用
經理的創作
Directory index = new SimpleFSDirectory(new File(LUCENE_INDEX_PATH));
w = new IndexWriter(index, config);
indexReader = IndexReader.open(w, true);
manager = new SearcherManager(w, true, null, null);
更新請求
w.updateDocument(t, document);
manager.maybeReopen(); // openIfChanged same behavior
w.commit();
搜索請求
IndexSearcher searcher = manager.acquire();
try {
return performSearch(query, searcher, skip, limit);
} finally {
manager.release(searcher);
searcher = null;
}
更改刷新到磁盤,但新的搜索請求後,才重新啓動應用程序看到他們(娛樂的指數)。看起來像IndexSearcher還指向舊索引。
是的,單獨的indexReader只是一個遺留代碼,已刪除。我確切地知道,當做出更改時,對我來說,最好是在同一個線程中調用maybeReopen。現在是唯一一個按Term來刪除文檔的問題。文件不會從索引中刪除可以請您提出常見的刪除方式嗎?在索引中可能更好地標記爲「已刪除」,並且僅更新文檔 – user12384512 2012-02-06 18:07:23
如果您調用IndexWriter.deleteDocuments(Term),然後打開新的NRT閱讀器(applyAllDeletes傳遞true),則應該反映刪除。你確定你有合適的期限嗎? – 2012-04-05 14:26:16