【发布时间】:2014-08-20 09:32:11
【问题描述】:
我注意到updateDocument method 在其参数中只包含一个 Term。 我觉得这很奇怪,因为 deleteDocument 可以使用多个术语甚至是查询来选择要删除的文档...
为什么 updateDocument 不允许我们指定多个 Term ?背后有技术原因还是只是尚未实施?
【问题讨论】:
我注意到updateDocument method 在其参数中只包含一个 Term。 我觉得这很奇怪,因为 deleteDocument 可以使用多个术语甚至是查询来选择要删除的文档...
为什么 updateDocument 不允许我们指定多个 Term ?背后有技术原因还是只是尚未实施?
【问题讨论】:
免责声明:我没有编写此代码,也不知道确切原因,所以我只能猜测。
首先,Lucene 中的更新始终意味着删除+插入的组合,而删除始终是单个操作。是的,更新现在是原子的,但您仍然需要.commit() 才能使更改生效。
其次,我猜很难设计干净的 API 来更新多个文档。对于每个文档(它本身是字段的集合),您必须传递一组术语,因此对于多个文档,您必须有一个集合集合(或专门设计的命令对象),哎呀。 And when in doubt, leave it out! 要求客户有循环有什么问题?其实没那么复杂。
【讨论】:
.commit()(加上重新打开索引阅读器),这个操作对于最终用户来说看起来像是原子操作。