Я пытаюсь обновить документ вasticsearch-py, и я пытался работать в соответствии со следующим вопросом:
Как обновить документ с использованиемasticsearch-py?
Тем не менее, я столкнулся с некоторыми проблемами и различиями между elastisearch.create иasticsearch.update, и я не нашел способа решить эту проблему.
У меня есть объекты Python, которые я сериализую с помощью json.dumps:
json_create = json.dumps(document, cls=Encoder)
и я получаю действительный документ JSON.
Затем я создаю узлы с
res = es.index(my_index_id, 'my_data_type', json_create, my_identifier)
и все работает нормально.
Когда я пытаюсь обновить документ, я делаю это аналогичным образом и создаю объекты update_container, чтобы получить право на "doc" -объект и node-strucutre (как объяснено в вышеупомянутом вопросе):
update_json = json.dumps(update_container, cls=HiddenEncoder)
Опять же, если я распечатываю результат, я получаю действительный документ JSON с чем-то вроде
{"doc": {"data": {...}}
Затем я пытаюсь отправить обновления:
res = es.update(index=my_index_id, doc_type='my_doc_type', id=my_identifier, body=update_json)
Однако, когдаЯ выполняю этот код, я получаю следующую ошибку:
elasticsearch.exceptions.RequestError: RequestError(400, 'mapper_parsing_exception', 'failed to parse [data]')
Если я использую только часть обновления (без контейнера)
res = es.update(index=my_index_id, doc_type='my_doc_type', id=my_identifier, body={"doc": {"data": only_update_part}})
, это работает, но данные не сохраняютсясо всеми его подузлами, но скорее сохраняются как одна строка с экранированными кавычками.
Мне кажется, что в функции create данные отправляются напрямую, а в части обновления все кавычки экранируются,Почему две функции работают с телом по-разному?И как я могу обновить узел данных с полным объектом?
Заранее спасибо!