我刚刚将我们的 Lucene 实现从 3.1 移植到 4.9,如果没有 forceMerge(1)(曾经是优化的),我似乎仍然无法更新索引中的文档。我了解,每当我更新文档时,旧文档都会被标记为已删除,而新文档会存储在新的段/文件中。升级后我继续看到的结果是文档被标记为已删除,但搜索者似乎从未看到新段。对该文档的搜索只是空的。为什么它不起作用?
我希望工作的代码:
IndexWriter indexWriter =
new IndexWriter(FSDirectory.open(indexDirectoryFile),
getIndexWriterConfig());
Document document = buildDocument(p);
indexWriter.updateDocument(
new Term(SKU_FIELD_NAME, p.getSku().toString()), document);
indexWriter.commit();
indexWriter.close();
searcherManager.maybeRefresh();
有效的代码:
IndexWriter indexWriter =
new IndexWriter(FSDirectory.open(indexDirectoryFile),
getIndexWriterConfig());
Document document = buildDocument(p);
indexWriter.updateDocument(
new Term(SKU_FIELD_NAME, p.getSku().toString()), document);
indexWriter.commit();
**indexWriter.forceMerge(1,true);**
indexWriter.close();
searcherManager.maybeRefresh();