# 1. ES批量操作
from elasticsearch5 import Elasticsearch, helpers
es = Elasticsearch([{"host": ELASTIC_SEARCH_IP, "port": 9200, "timeout": 1500}])
## 批量查詢
es_result = helpers.scan(
client=es,
query=body,
scroll='5m', # 5m表示分鐘, y-年M:月,w周,d天,h小時m分鐘,s秒
index=idx,
doc_type='news',
timeout="5m" # timeout
)
## 批量插入
action = {
"_index": "idx",
"_type": "news",
"_id": new_id,
"_source": line["_source"] # 部分字段更新使用doc,全字段更新使用_source
}
actions.append(action)
result_es = helpers.bulk(es, actions, stats_only=True, raise_on_error=False, refresh=True)
## 批量修改
1.相同數據的統一修改
updateBody = {
"query":{
"range":{
"write_date": {
"gte": "2019-01-15 12:30:17",
"lte": "now"
}
}
},
"script": {
"inline": "ctx._source.index = params.index",
"params": {
"index": 211
},
"lang":"painless"
}
}
es_client.update_by_query(index="log_index",doc_type='log_index',body=updateBody)
## 批量在Python中的拼接格式,除了delete之外,其他的都是兩句對應一個操作
## 第一句用來定位什麼操作,第二句是操作成什麼樣子。
doc = [
{'update':{'_index':'ecommerce','_id':'11'}},
{'doc':{'price':1314}},
{'update': {'_index': 'ecommerce', '_id': '1'}},
{'doc': {'price': 7758}},
]
result = es.bulk(body=doc, index="ecommerce")
es 批量操作詳細講
如何使用python對ES進行批量更新操作
## mongo批量操作
import pymongo
from pymongo import UpdateOne, InsertOne
mong_cient = pymongo.MongoClient(host=MONGODB_IP, port=MONGODB_PORT, connect=False)
coll = mngo.collect
operations.append(UpdateOne({"_id": k},{"$inc": data}))
operations.append(InsertOne({"_id": k}))
result = coll.bulk_write(operations)
# MYSQL 批量更新
import pymysql
_conn = pymysql.connect(
host=self.host,user=self.user,
passwd=self.pwd,db=self.db,charset=self.charset)
_cursor = _conn.cursor()
sql_insert = "INSERT INTO `test_news`.`test_news_detail` (`nid`, `title`, `author`, `content`, `pub_time`) values (%s, %s, %s, %s, %s)"
data_list = [('1','標題','','',''), ('1','標題','','',''),('1','標題','','','')]
_cursor.executemany(sql_insert, data_list)