【问题标题】:Why does Lucene's IndexWriter updateDocument method take only one Term in its parameters? [closed]为什么 Lucene 的 IndexWriter updateDocument 方法的参数中只有一个 Term? [关闭]
【发布时间】:2014-08-20 09:32:11
【问题描述】:

我注意到updateDocument method 在其参数中只包含一个 Term。 我觉得这很奇怪,因为 deleteDocument 可以使用多个术语甚至是查询来选择要删除的文档...

为什么 updateDocument 不允许我们指定多个 Term ?背后有技术原因还是只是尚未实施?

【问题讨论】:

    标签: java apache lucene


    【解决方案1】:

    免责声明:我没有编写此代码,也不知道确切原因,所以我只能猜测。

    首先,Lucene 中的更新始终意味着删除+插入的组合,而删除始终是单个操作。是的,更新现在是原子的,但您仍然需要.commit() 才能使更改生效。

    其次,我猜很难设计干净的 API 来更新多个文档。对于每个文档(它本身是字段的集合),您必须传递一组术语,因此对于多个文档,您必须有一个集合集合(或专门设计的命令对象),哎呀。 And when in doubt, leave it out! 要求客户有循环有什么问题?其实没那么复杂。

    【讨论】:

    • 对不起,我没有解释我为什么要问这个问题。我正在开发一个搜索模块。它的索引包含各种来源的文档,我希望能够使用 id 和类型来更新它们(这里的“id”和“type”是我自己对我自己的文档模型的概念)。使用updateDocument,我不能直接这样做。删除(使用包含 id 和类型的查询)然后添加可以解决问题。但由于 Lucene 本身并没有这样做,我想知道我是否没有遗漏一些关于它工作方式的基本内容。
    • 不,你没有。只需删除+插入,这没有什么问题。因为无论如何你都必须在最后.commit()(加上重新打开索引阅读器),这个操作对于最终用户来说看起来像是原子操作。
    • 好的,太好了!谢谢你的回答:)
    猜你喜欢
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    相关资源
    最近更新 更多