如何通过一个API调用将多个文档发送到Elastic

时间:2019-04-19 23:56:46

标签: elasticsearch

我是Elastic的新手,我需要一种方法,只需一个调用POST http://localhost:9200/myindex/mytype/就可以将多个文档推送到Elastic。

主体模式如下:

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

我尝试了摄取API和管道,但是没有运气。

有可能吗?

3 个答案:

答案 0 :(得分:2)

我认为您需要的是批量API ,该API可让您在单个API调用中执行许多索引/删除操作,从而提高了索引编制速度。这是link

所以您可以做的是

for f in glob.glob('foo*'): shutil.copy2(f, 'bar')
POST http://localhost:9200/_bulk
POST http://localhost:9200/myindex/_bulk

尝试其中之一,并结合您的身体内容,让我知道它是否有效。

答案 1 :(得分:1)

您可以使用bulk 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"}

答案 2 :(得分:1)

谢谢@JinLee和@NishantSaini都对我的帮助。我想记录一下我所做的。

首先,添加/_bulk端点。因此,API调用现在为:POST http://localhost:9200/myindex/mytype/_bulk

现在将Content-Type标头设置为application/x-ndjson

然后身体必须是这样的:

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

现在一切正常!