我想将数据推送到我的Elasticsearch服务器使用:
requests.post('http://localhost:9200/_bulk', data=data_1 + data_2)
,它抱怨索引不存在。我尝试手动创建索引:
curl -X PUT http://localhost:9200/_bulk
,它抱怨我没有给它提供body:
{"error":{"root_cause":[{"type":"parse_exception","reason":"request body is required"}],"type":"parse_exception","reason":"request body is required"},"status":400}
这里似乎有点鸡和蛋的问题。如何创建_bulk
索引,然后发布我的数据?
编辑:
我的数据非常大,甚至无法理解模式。下面是一小段代码:
'{"create":{"_index":"products-guys","_type":"t","_id":"0"}}n{"url":"http://www.plaisio.gr/thleoraseis/tv/tileoraseis/LG-TV-43-43LH630V.htm","title":"TV LG 43\" 43LH630V LED Full HD Smart","description":"\u039a\u03b1\u03b9 \u03cc\u03bc\u03bf\u03c1\u03c6\u03b7 \u03ba\u03b1\u03b9 \u03ad\u03be\u03c5\u03c0\u03bd\u03b7, \u03bc\u03b5 \u03b9\u03c3\u03c7\u03c5\u03c1\u03cc \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2 \u03ba\u03b1\u03b9 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03b9\u03ba\u03cc webOS 3.0 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b7 \u03c4\u03b7\u03bb\u03b5\u03cc\u03c1\u03b1\u03c3\u03b7 \u03c0\u03bf\u03c5 \u03c0\u03ac\u03b5\u03b9 \u03c3\u03c4\u03bf \u03c3\u03b1\u03bb\u03cc\u03bd\u03b9 \u03c3\u03bf\u03c5","priceCurrency":"EUR","price":369.0}n{"create":{"_index":"products-guys","_type":"t","_id":"1"}}n{"url":"http://www.plaisio.gr/thleoraseis/tv/tileoraseis/Samsung-TV-43-UE43M5502.htm","title":"TV Samsung 43\" UE43M5502 LED ...
这基本上是别人的代码,我需要使其工作。似乎"数据"我传递给PUT方法的对象是一个字符串。
当我使用requests.post('http://localhost:9200/_bulk', data=data)
得到<Response [406]>
,
如果您想使用requests
进行批量请求
response = requests.post('http://localhost:9200/_bulk', data= data=data_1 + data_2, headers={'content-type':'application/json', 'charset':'UTF-8'})
老回答
我建议使用python库中的批量帮助器
from elasticsearch import Elasticsearch, helpers
client = Elasticsearch("localhost:9200")
def gendata():
mywords = ['foo', 'bar', 'baz']
for word in mywords:
yield {
"_index": "mywords",
"word": word,
}
resp = helpers.bulk(
client,
gendata(),
index = "some_index",
)
如果你没有修改elasticsearch配置,一个新的索引将被创建。
关于你尝试过的方法:
可能是错误的查询。批量获取身体形状与仅仅将文档作为json数组发送是不同的。
你正在做PUT而不是post,你必须指定你想要摄取的文档。
不需要先创建空索引。如果你想这样做,你可以这样做:
curl -X PUT http://localhost:9200/index_name