Массовое обновление с Python'sasticsearch
Я пытаюсь выполнить массовое обновление, основанное на изменении состояния свойства документа. Создание работает отлично, но объем волнуется. Я получаю сообщение об ошибке "скрипт или документ отсутствует", но все выглядит хорошо.
Вот как я пытаюсь выполнить массовое обновление:
frequency_cleared = [
{
"_id": result['_id'],
"_type": "the-type",
"_index": "the-index",
"_source": result['_source'],
"_op_type": 'update'
}
for result in search_results['hits']['hits']
]
Причина, по которой я перебираю свои результаты, заключается в том, что я использую if в моем понимании списка, но так как я могу видеть результаты, которые я получаю, я знаю, что это не проблема. Я не могу показать результаты, и мне пришлось поменять названия свойств, так как это для компании, в которой я работаю.
Вот обратная связь:
Elasticsearch.exceptions.RequestError:
TransportError(400, 'action_request_validation_exception',
'Validation Failed: 1: script or doc is missing...')
Эллипсы представляют это, показывая ту же самую ошибку для каждого элемента в списке, терпящем неудачу.
1 ответ
По документам было трудно сказать, но я выяснил проблему. Если вы хотите выполнить массовое обновление, вам нужно обернуть свой источник в словарь с ключом "doc". Вот правильный пример, надеюсь, это поможет!
frequency_cleared = [
{
'_id': result['_id'],
"_type": "the-type",
"_index": "the-index",
"_source": {'doc': result['_source']},
'_op_type': 'update'
}
for result in search_results['hits']['hits']
]
Обратите внимание на небольшое изменение "_source" на {'doc': result['_source']}