Разные JSON-разборы вasticsearch-py обновляют и создают? - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь обновить документ в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 данные отправляются напрямую, а в части обновления все кавычки экранируются,Почему две функции работают с телом по-разному?И как я могу обновить узел данных с полным объектом?

Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...