Подтвердить что ты не робот

Операция вставки/обновления ElasticSearch

Я не уверен, правильно ли я использую операцию upsert в массовой индексации.

Мой запрос:

{ "update": {"_id": "610946100"}}\n
{"doc": {"id":"610946100","uri":"/0/0/1/6/4/0/610946100.xml"}, "doc_as_upsert" : true}\n

и url: http://localhost:9200/anIndex/aType/_bulk

Думаю, я пропустил что-то в документации , но я все еще не могу найти, как это сделать.

Я хочу, чтобы создавал вышеуказанный документ в индексе или обновлял его, если он существует.

4b9b3361

Ответ 1

Если вы добавляете записи в индекс через массовый API в качестве

{ "create": {"_id": "someId"}}\n
{"id":"someId","uri":"/0/1/3/2/1/0511912310/511912310.xml"}\n

то если идентификатор уже существует в индексе, вы получите исключение. Если вы хотите либо добавить, либо заменить документ (в зависимости от того, существует он или нет), вы должны сделать запрос как

{ "index": {"_id": "someId"}}\n
{"id":"someId","uri":"/0/1/3/2/1/0511912310/511912310.xml"}\n

create не удастся, если существует документ с тем же индексом и типом уже, тогда как индекс будет добавлять или заменять документ по мере необходимости

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html версия 5.3

Ответ 2

Единственное, что я вижу, который отличается от вашего запроса и Bulk Documentation, состоит в том, что примеры имеют индекс и тип, определенные в действии обновления, Поэтому на основе этого я бы постарался добавить эти значения, как показано ниже.

{"update": {"_id": "610946100", "_type": "aType", "_index": "anIndex"}}\n
{"doc": {"uri":"/0/0/1/6/4/0/610946100.xml"}, "doc_as_upsert" : true}\n

Кроме того, поскольку вы указываете документ _id в команде обновления, я удаляю его из частичного документа или отмечаю его как _id. (Вам не хватало подчеркивания)