玩弄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