锁定特定文档以在Solr中进行编辑

时间:2019-05-01 20:24:13

标签: solr lucene solrj solrcloud solr6

有没有一种方法可以锁定特定文档以在Solr6或Solr7中进行编辑/删除? 例如,我阅读了一个文档,根据它的内容,我看到它应该被更新或删除。然后,我发送更新/删除查询。但是,在我阅读文档的那一刻和发送该查询的那一刻之间,我想确保文档没有被其他过程更新或删除-将其“锁定”以进行任何编辑。有办法吗?

1 个答案:

答案 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”,则不   版本是否匹配或文档是否存在无关紧要。如果它   存在,它将被覆盖;如果不存在,它将是   添加。