Как предотвратить конфликт версий при переиндексации/добавлении одного и того же документа обратно в ядро ​​Solr?

У меня есть ядро ​​Solr, содержащее 60 тысяч документов. Я обновил типы полей в schema.xml и не хочу удалять ядро ​​Solr для переиндексации. Я пытаюсь получить документы с помощью поиска Solr, а затем пытаюсь добавить тот же документ с тем же идентификатором обратно в Solr. При этом я получаю конфликт версий.

Пример: я получаю один документ, используя поисковый запрос Pysolr. Документ выглядит так:

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

Приведенный выше документ все еще существует в Solr, и я не хочу его менять. Я хочу переиндексировать его/добавить обратно в 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]

Почему «фактическая» версия меняется, а не остается «ожидаемой» версией?

Как я могу это решить (примеры приветствуются)?

1 ответ

Это поле используется внутри Solr для управления функциями частичного обновления и журнала обновлений. Вы не должны включать его в свои документы при переиндексации. Просто удалите его.

Если вам нужна функция Solr Optimistic Concurrency , в этом случае _version_ must be specified as part of the update command in the request, not in the documents.

Другие вопросы по тегам