【发布时间】:2019-09-20 09:01:01
【问题描述】:
有没有办法在 Solr6 或 Solr7 中锁定特定文档以进行编辑/删除? 例如,我阅读了一个文档,根据它的内容我认为它应该被更新或删除。然后我发送更新/删除查询。但是在我阅读文档的那一刻和我发送该查询的那一刻之间,我想确保该文档没有被其他进程更新或删除 - “锁定”它以进行任何编辑。有没有办法做到这一点?
【问题讨论】:
标签: solr lucene solrj solrcloud solr6
有没有办法在 Solr6 或 Solr7 中锁定特定文档以进行编辑/删除? 例如,我阅读了一个文档,根据它的内容我认为它应该被更新或删除。然后我发送更新/删除查询。但是在我阅读文档的那一刻和我发送该查询的那一刻之间,我想确保该文档没有被其他进程更新或删除 - “锁定”它以进行任何编辑。有没有办法做到这一点?
【问题讨论】:
标签: solr lucene solrj solrcloud solr6
您可以在 Solr 中使用the optimistic concurrency feature。
实际上,您在请求中包含了来自文档_version_ 字段的值。如果您包含的 _version_ 值与文档中的值不匹配(即文档在您检索后已更新),则更新失败并返回 409 HTTP 错误代码。
客户端读取文档。在 Solr 中,可以检索文档 使用 /get 处理程序确保拥有最新版本。
客户端在本地更改文档。
客户端将更改后的文档重新提交给Solr,例如, 也许与 /update 处理程序有关。
如果存在版本冲突(HTTP 错误代码 409),客户端 重新开始这个过程。
_version_ 字段中给出的值可以指示您想要的行为:
如果
_version_字段中的内容大于“1”(即, '12345'),则文档中的_version_必须与_version_匹配 在索引中。如果
_version_字段中的内容等于'1',那么 文件必须简单地存在。在这种情况下,不会发生版本匹配, 但如果文档不存在,更新将被拒绝。如果
_version_字段中的内容小于'0'(即'-1'), 那么该文件一定不存在。在这种情况下,没有版本匹配 发生,但如果文档存在,则更新将被拒绝。如果
_version_字段中的内容等于'0',那么它不 无论版本是否匹配或文档是否存在。如果它 存在,将被覆盖;如果它不存在,它将是 已添加。
【讨论】: