Python ES批量有bulk、streaming_bulk、update_bu_query 3種方式,個人實驗update_bu_query效率最高。以其爲例
1、按條件更新文檔:
kibana語法
POST /rec_userinfo_v1/_update_by_query?conflicts=proceed
{
"query": {
"terms": {"uid":[470979096, 331290690]}
},
"script":{
"lang":"painless",
"inline":"ctx._source.uidstatus = params.last",
"params": {"last":6}
}
}
// 查詢修改結果
GET /rec_userinfo_v1/_search
{
"query": {
"terms": {
"uid": [
470979096, 331290690
]
}
}
}
// 模糊搜索結果做條件
updateBody = {
"query": {
"query_string": {"default_field": "topic", "query": "*{}*".format(topicstr)}
},
"script": {
"inline": "ctx._source.state = params.index",
"params": {
"index": 2
},
"lang": "painless"
}
}
// 精準條件
updateBody = {
"query": {
"terms": {"tid": [123,456]}
},
"script": {
"inline": "ctx._source.state = params.index",
"params": {
"index": 2
},
"lang": "painless"
}
}
print(updateBody)
es_client = Elasticsearch(["IP:9092"], timeout=60)
es_client.update_by_query(index="topic", body=updateBody)