有没有一种方法可以锁定特定文档以在Solr6或Solr7中进行编辑/删除? 例如,我阅读了一个文档,根据它的内容,我看到它应该被更新或删除。然后,我发送更新/删除查询。但是,在我阅读文档的那一刻和发送该查询的那一刻之间,我想确保文档没有被其他过程更新或删除-将其“锁定”以进行任何编辑。有办法吗?
答案 0 :(得分:1)
您可以在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”,则不 版本是否匹配或文档是否存在无关紧要。如果它 存在,它将被覆盖;如果不存在,它将是 添加。