我有一个小的(~50,00)json字典数组,我想在ES中存储/索引。我的偏好是使用python,因为我想索引的数据来自csv文件,通过python加载并转换为json。或者,我想跳过转换为json的步骤,并简单地使用我拥有的python词典数组。无论如何,快速搜索揭示了ES的批量索引功能。我想做这样的事情:
post_url = 'http://localhost:9202/_bulk'
request.post(post_url, data = acc ) # acc a python array of dictionaries
或
post_url = 'http://localhost:9202/_bulk'
request.post(post_url, params = acc ) # acc a python array of dictionaries
两个请求都提供[HTTP 500错误]
答案 0 :(得分:2)
我的理解是你必须有一个"命令"每行(索引,创建,删除...),然后其中一些(如索引)在下一行上获取一行数据,如此
{'index': ''}\n
{'your': 'data'}\n
{'index': ''}\n
{'other': 'data'}\n
注意新行,即使在最后一行。
如果您发送到../index/type/_bulk,则上面的空索引对象有效,否则您需要指定我认为的索引和类型,还没有尝试过。
答案 1 :(得分:0)
我对Python知之甚少,但你看过Pyes吗? Pyes支持Bulk。
答案 2 :(得分:0)
您可以使用以下功能:
def post_request(self, endpoint, data):
endpoint = 'localhost:9200/_bulk'
response = requests.post(endpoint, data=data, headers={'content-type':'application/json', 'charset':'UTF-8'})
return response
作为数据,您需要传递一个字符串,如:
{ "index" : { "_index" : "test-index", "_type" : "_doc", "_id" : "1681", "routing" : 0 }}
{ "field1" : ... , ..., "fieldN" : ... }
{ "index" : { "_index" : "test-index", "_type" : "_doc", "_id" : "1684", "routing" : 1 }}
{ "field1" : ... , ..., "fieldN" : ... }
确保添加" \ n"在每一行的末尾。