Как я могу отправить несколько документов в эластичный с одним вызовом API - PullRequest
1 голос
/ 20 апреля 2019

Я новичок в Elastic, и мне нужен способ отправить несколько документов в Elastic, сделав всего один вызов POST http://localhost:9200/myindex/mytype/.

Схема тела выглядит следующим образом:

{ 
"docs": [ 
{ "_source": {"message":"message1"} }, 
{ "_source": {"message":"message2"} } 
] 
}

Я безуспешно пытался использовать ingest API и Pipelines.

Возможно ли это?

Ответы [ 3 ]

2 голосов
/ 20 апреля 2019

Я думаю, что вам нужно Bulk API , который позволяет выполнять множество операций индексирования / удаления за один вызов API, увеличивая тем самым скорость индексации.Вот ссылка

Итак, что вы можете сделать, это:

POST http://localhost:9200/_bulk
POST http://localhost:9200/myindex/_bulk
POST http://localhost:9200/myindex/mytype/_bulk

попробоватьодин из них с содержимым вашего тела, и дайте мне знать, если это работает.

1 голос
/ 20 апреля 2019

Спасибо вам обоим @JinLee и @NishantSaini за помощь.Я хочу задокументировать, что я сделал.

Сначала добавьте /_bulk конечную точку.Итак, вызов API теперь: POST http://localhost:9200/myindex/mytype/_bulk.

Теперь установите заголовок Content-Type на application/x-ndjson

Тогда тело должно быть таким:

{"index":{}}
{"message":"message1"}
{"index":{}}
{"message":"message2"}

И теперь все работает!

1 голос
/ 20 апреля 2019

Вы можете использовать массовый API для этого.

Например:

POST _bulk
{"index":{"_index":"my_index","_type":"_doc","_id":"1"}}
{"field1":"field 1 data 1","field2":11}
{"index":{"_index":"my_index","_type":"_doc","_id":"2"}}
{"field1":"field 1 data 2","field2":21}

В вашем случае это будет означать:

POST _bulk
{"index":{"_index":"myindex","_type":"mytype"}}
{"message":"message1"}
{"index":{"_index":"myindex","_type":"mytype"}}
{"message":"message2"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...