【问题标题】:Lucene 4.6 IndexReader deletionLucene 4.6 IndexReader 删除
【发布时间】:2013-12-29 08:24:56
【问题描述】:

在最新版本的 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。

标签: lucene


【解决方案1】:

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

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

【讨论】:

  • 而且网上所有关于lucene的教程都是3.0以下的版本,挺烦的。 API 完全不同。
猜你喜欢
  • 2011-03-26
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 1970-01-01
  • 2013-04-22
相关资源
最近更新 更多