当 reindexing/adding 相同的文档返回到 Solr 核心时,如何防止版本冲突?

How do I prevent a version conflict when reindexing/adding the same document back into the Solr core?

我有一个包含 60k 文档的 Solr 核心。我已经更新了 schema.xml 中的字段类型,我不想删除 Solr 核心以重新编制索引。我正在尝试使用 Solr 搜索检索文档,然后尝试将具有相同 ID 的相同文档添加回 Solr。这样做时,我遇到了版本冲突。

示例: 我使用 Pysolr 搜索请求检索一个文档。文档如下所示:

doc = {
        "type":"person",
        "lastname":"Johnson",
        "firstname":"Bobby",
        "id":"person_abcd",
        "_version_":1691404871556661248}

上述文档在Solr中仍然存在,我不想更改它。我想重新索引 it/add 它再次回到 Solr 因为 schema.xml 中的字段类型已经改变。

当我这样做时:

import pysolr

core = pysolr.Solr('http://localhost:10000/solr/core', always_commit=True)
core.add(doc)

我得到以下 错误:

pysolr.SolrError: Solr responded with an error (HTTP 409): [Reason: version conflict for person_abcd expected=1691404871556661248 actual=1691426574942863360]

为什么 'actual' 版本发生变化而不是保持 'expected' 版本?

我该如何解决这个问题(感谢示例)?

_version_ 字段由 Solr 在内部使用,用于管理部分更新和更新日志功能。重建索引时不应将其包含在文档中。删除它即可。

如果您需要 Solr Optimistic Concurrency 功能,在这种情况下,_version_ 必须在请求中指定为更新命令的一部分,而不是在文档中指定。