SolrCloud 中的乐观并发问题

Optimistic concurrency issue in SolrCloud

我在云模式下使用 Solr v7.7.1。我面临与 optimistic concurrency:

相关的问题

我有一个嵌套文档,可以在提交更新之前同时更新多次。在索引的过程中,我们获取我们想要修改的文档连同它的 _version_,修改它然后将它连同相同的 _version_ 一起发送到 solr。如果更新在提交之前发生不止一次,则会抛出以下错误:

Caused by: org.apache.solr.client.solrj.impl.HttpSolrClient$RemoteSolrException: Error from server at http://1.2.3.4:8983/solr/mcollection_shard1_replica_n2: version conflict for 1111 expected=1645085633861910528 actual=1645090791527284737

在上述错误中,我们基本上是在索引和提交文档的先前版本之前尝试索引 ID 为 1111 的文档。这个问题的解决方案是简单地提交所有更新,然后再次尝试索引新文档。但是,即使在提交之后,solr 也会以相同的版本代码给出相同的错误。可能是什么问题?

一个奇怪的观察是,当 solr 不是 运行 云模式时,不会面临这个问题。

当我们使用嵌套文档时,这似乎是 solr 的一个非常具体的问题。

在索引文档时,当提到 _version_ 时,solr 通过执行 real-time get 检查已经存在的最新文档的 版本 。实时获取从更新日志中获取数据(这意味着还可以访问尚未开放搜索的数据)。为此,solr 执行如下操作:

http://1.2.3.4:8983/solr/mcollection/get?id=1111

现在如果你有 2 个嵌套文档,在一个文档 (doc1) 中,父文档的 id=1111 而在另一个文档 (doc2) 中,子文档的 id=1111,那么 solr 可能会检查版本 的 doc2,当您打算索引 doc1 时。这可能是因为solr在做实时get的时候,仍然对所有的文档进行索引,没有考虑父子关系。

解决办法是让父子文档的id互不相同。

错误已报告:https://issues.apache.org/jira/browse/SOLR-13785