Операция вставки/обновления 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
Думаю, я пропустил что-то в документации , но я все еще не могу найти, как это сделать.
Я хочу, чтобы создавал вышеуказанный документ в индексе или обновлял его, если он существует.
Ответы
Ответ 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
. (Вам не хватало подчеркивания)