Я использую Elasticsearch версии 5.6.10. У меня есть запрос, который удаляет записи для данного агентства, поэтому они могут позже обновляться ночным скриптом.
Запрос находится вasticsearch-dsl и выглядит так:
def remove_employees_from_search(jurisdiction_slug, year):
s = EmployeeDocument.search()
s = s.filter('term', year=year)
s = s.query('nested', path='jurisdiction', query=Q("term", **{'jurisdiction.slug': jurisdiction_slug}))
response = s.delete()
return response
Проблема в том, что я получаю исключение ConflictError при попытке удалить записи с помощью этой функции. Я читал, что это происходит потому, что документы были разными в момент запуска и выполнения процесса удаления. Но я не знаю, как это может быть, потому что больше ничего не изменяет записи во время процесса удаления.
Я собираюсь добавить s = s.params(conflicts='proceed')
, чтобы исключить исключение. Но это пластырь, так как я не понимаю, почему удаление не обрабатывается, как ожидалось. Любые идеи о том, как решить эту проблему? Ниже приведен снимок ошибки:
ConflictError:TransportError(409,
u'{
"took":10,
"timed_out":false,
"total":55,
"deleted":0,
"batches":1,
"version_conflicts":55,
"noops":0,
"retries":{
"bulk":0,
"search":0
},
"throttled_millis":0,
"requests_per_second":-1.0,
"throttled_until_millis":0,
"failures":[
{
"index":"employees",
"type":"employee_document",
"id":"24681043",
"cause":{
"type":"version_conflict_engine_exception",
"reason":"[employee_document][24681043]: version conflict, current version [5] is different than the one provided [4]",
"index_uuid":"G1QPF-wcRUOCLhubdSpqYQ",
"shard":"0",
"index":"employees"
},
"status":409
},
{
"index":"employees",
"type":"employee_document",
"id":"24681063",
"cause":{
"type":"version_conflict_engine_exception",
"reason":"[employee_document][24681063]: version conflict, current version [5] is different than the one provided [4]",
"index_uuid":"G1QPF-wcRUOCLhubdSpqYQ",
"shard":"0",
"index":"employees"
},
"status":409
}