Lucene updateDocument删除文档,但计数不断增加

时间:2012-10-17 11:23:36

标签: java lucene

我使用updateDocument()方法更新lucene索引中的文档。我就是这样做的。

writer.updateDocument(new Term(Constants.DOC_ID_FIELD, doc.get(Constants.DOC_ID_FIELD)), doc);

我用Luke检查我的索引数据,并发现在第二次索引时,Luke告诉Deleted Document - not available。所以基本上,文档被标记为已删除,但它仍然存在于索引中。

我不想保留这些标记为已删除的文件。我做错了吗?

另外,我的理解是,当我更新文档时,它会删除旧文档,然后添加新文档。那不是这样吗?

2 个答案:

答案 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();

    }

参考:http://www.avajava.com/tutorials/lessons/how-do-i-delete-a-document-from-a-lucene-index-using-the-value-of-a-field.html