我是Elastic的新手,我需要一种方法,只需一个调用POST http://localhost:9200/myindex/mytype/
就可以将多个文档推送到Elastic。
主体模式如下:
{
"docs": [
{ "_source": {"message":"message1"} },
{ "_source": {"message":"message2"} }
]
}
我尝试了摄取API和管道,但是没有运气。
有可能吗?
答案 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"}
现在一切正常!