我使用updateDocument()
方法更新lucene索引中的文档。我就是这样做的。
writer.updateDocument(new Term(Constants.DOC_ID_FIELD, doc.get(Constants.DOC_ID_FIELD)), doc);
我用Luke检查我的索引数据,并发现在第二次索引时,Luke告诉Deleted Document - not available
。所以基本上,文档被标记为已删除,但它仍然存在于索引中。
我不想保留这些标记为已删除的文件。我做错了吗?
另外,我的理解是,当我更新文档时,它会删除旧文档,然后添加新文档。那不是这样吗?
答案 0 :(得分:2)
从邮件列表中得到答案。
IndexWriter.updateDocument()
删除然后添加。所以你的索引将删除文档。你为什么在乎?随着细分合并,它们最终会消失。如果您真的关心,请参阅
IndexWriter,forceMergeDeletes()
。也可以看看 javadoc:这通常是一个非常昂贵的操作;很少有必要。
答案 1 :(得分:0)
以下内容应从索引中删除文档:
public static void deleteDocumentsFromIndexUsingTerm(Term term) throws IOException, ParseException {
System.out.println("Deleting documents with field '" + term.field() + "' with text '" + term.text() + "'");
Directory directory = FSDirectory.getDirectory(INDEX_DIRECTORY);
IndexReader indexReader = IndexReader.open(directory);
indexReader.deleteDocuments(term);
indexReader.close();
}