Easysearch、Elasticsearch 还是 Opensearch,是个问题

如何使用python对ES进行批量更新操作

Elasticsearch | 作者 hjchyp | 发布于2019年08月09日 | 阅读数:12212

在kibana中得console中我可以用如下代码进行bulk中的更新操作
post _bulk
{"update":{"_id":"1","_index":"ecommerce","retry_on_conflict" : 3}}
{"doc":{"price7":"1991999","price":9999,"price8":8899988}}
{"update":{"_id":"11","_index":"ecommerce","retry_on_conflict" : 3}}
{"doc":{"price7":"112222","price":9999,"price8":9999}}​
但是在python中,如何使用bulk方法?
我遇到的问题主要有:
1. 不会用python拼接成
{"update":{"_id":"1","_index":"ecommerce","retry_on_conflict" : 3}}
{"doc":{"price7":"1991999","price":9999,"price8":8899988}}
{"update":{"_id":"11","_index":"ecommerce","retry_on_conflict" : 3}}
{"doc":{"price7":"112222","price":9999,"price8":9999}}
这种格式的数据
2. python中的bulk的各项参数怎么设置,我这样设置是不是错的?
from elasticsearch import Elasticsearch
import pandas as pd

es = Elasticsearch()


i = 1
actions = []
df = pd.DataFrame(data={"id":[1,11],"price":[1314,7758],"price7":[7777,8888]})
print(df)

for id_a in range(0,len(df)):
action = {
"_op_type":"update",
"_index":"ecommerce",
"_type":"_doc",
"_id":str(df.loc[id_a,"id"]),
"doc":{
"price7":str(df.loc[id_a,"price7"]),
"price":int(df.loc[id_a,"price"])
}
}
actions.append(action)
print(actions)
result = es.bulk(body=actions, index="ecommerce")

如果有例子的话,就更好了。
已邀请:

hjchyp - 90后自学成才

赞同来自:

from elasticsearch import Elasticsearch
import pandas as pd

es = Elasticsearch()


doc = [
{'update':{'_index':'ecommerce','_id':'11'}},
{'doc':{'price':1314}},
{'update': {'_index': 'ecommerce', '_id': '1'}},
{'doc': {'price': 7758}},
]
result = es.bulk(body=doc, index="ecommerce")
今天回来看一下,在python里拼成这样的doc的形式就好。

要回复问题请先登录注册