Как предотвратить конфликт версий при переиндексации/добавлении одного и того же документа обратно в ядро 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.