【问题标题】:How do I delete old documents from Lucene/Lucene.NET如何从 Lucene/Lucene.NET 中删除旧文档
【发布时间】:2010-12-07 12:14:36
【问题描述】:

从 Lucene 索引中删除旧文档的惯用方法是什么?

我在所有文档上都有一个日期字段 (YYYYMMddhhmmss),我想删除超过一天的任何内容(例如)。

我应该执行过滤搜索还是枚举 IndexReader 的文档?

我确信无论 Lucene 在哪个平台上运行,问题都是一样的。

谢谢!

【问题讨论】:

    标签: .net indexing lucene lucene.net


    【解决方案1】:

    搜索 YYYYMMdd* 应该可以工作,因为当前日期存储为文本字符串。获得结果后,您可以使用 IndexReader.delete 删除您不感兴趣的文档。在我看来,这似乎是实现这一目标的最佳方式。

    【讨论】:

    • 我发现这种方法的一个问题是,当旧文档超过 1024 个时,我会收到“TooManyClauses”异常。
    • 这真的取决于你的实现。我需要知道细节,但作为一般规则,您可以删除这些搜索的警告,因为它们只是维护(通过设置更高的最大子句数),或者进行更具体的搜索(YYMMddhh* 等)。同样,一切都取决于您的环境和实施。
    • 我最终通过使用 MatchAllDocsQuery 和 RangeFilter 做了一个轻微的变化。到目前为止似乎工作正常......
    【解决方案2】:

    您可以尝试使用 Lucene 的低级 API。

    从索引中获取术语“YYYY”的术语枚举器。迭代术语枚举器以获取术语。如果术语的文本不包含当前日期(或以前的日期),请使用该术语调用 IndexReader.deleteDocuments(term)。

    由于你没有使用 Query 对象,你不会得到搜索相关的异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多