Lucene 4.6 IndexReader 删除

标签 lucene

在最新版本的 lucene 4.6 中,IndexReader.deleteDocuments() 不再存在。有人告诉我应该使用 IndexWriter 来代替。然而,API文档显示:

void deleteDocuments(Query... queries)

删除与任何提供的查询匹配的文档,

void deleteDocuments(Query query)

删除与所提供的查询匹配的文档,

void deleteDocuments(Term... terms)

删除包含任何术语的文档,并且

void deleteDocuments(Term term)

删除包含术语的文档。

没有通过文档 ID 删除文档的方法。

最佳答案

这是因为 Lucene 文档 ID 在 IndexWriter 中是短暂的,并且可以随时更改(合并完成后)。

但是,IndexWriter 确实有一个 tryDeleteDocument(),它需要一个近乎实时的 IndexReader 和一个 int docID 。如果可能(自打开 IndexReader 以来没有完成任何合并),删除将“起作用”并且该方法返回 true。如果该方法返回 false,您必须通过 TermQuery 删除,或者重新打开新的 NRT 阅读器并再次尝试删除。

关于Lucene 4.6 IndexReader 删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20823408/

相关文章:

lucene - Lucene 是如何工作的

java - 在 Windows 10 上安装 Solr

java - Solr 中的完全外连接

java - 如何为 lucene jar 文件设置类路径

java.lang.IncompleteClassChangeError,BM25BooleanQuery

hadoop - 使用 Apache Solr 导入或索引 Hive/HDFS 数据

elasticsearch - 有没有一种方法可以将 Elasticsearch “day level indices”聚合为单个 “month level index”?

lucene - ElasticSearch分数的分母是多少?

java - Solr 错误实例化类 : Custom Class

java - 如何在 lucene 4.0 中使用 ngram tokenizer?