Python请求.post不会强制Elasticsearch创建缺失索引



我想将数据推送到我的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配置,一个新的索引将被创建。

关于你尝试过的方法:

  1. 可能是错误的查询。批量获取身体形状与仅仅将文档作为json数组发送是不同的。

  2. 你正在做PUT而不是post,你必须指定你想要摄取的文档。

不需要先创建空索引。如果你想这样做,你可以这样做:

curl -X PUT http://localhost:9200/index_name

相关内容

  • 没有找到相关文章

最新更新