Массовое обновление с 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']}

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