将如下代码中按需做下替换即可
$ip 替换成es的ip;
$port 替换成es的端口;
$user 替换成es的用户;
$password 替换成es的密码;
# coding: gbk # 模型数据匹配文件 import datetime import os from elasticsearch import Elasticsearch, helpers os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8' def conn_es(): ''' es连接方法,带有用户名密码连接 :return: ''' es=Elasticsearch(hosts="$ip", port=$port, sniff_on_start=True, sniff_on_connection_fail=True, sniff_timeout=60, http_auth=('$user', '$password'), timeout=120) print('当前es环境 $ip:$port') return es def get_data_from_es(es, index, doc_type="doc", body={"query": {"match_all": {}}}, scroll='5m', timeout='1m', size=1000): ''' es7分页方法 :param es: :param index: :param doc_type: :param body: :param scroll: :param timeout: :param size: :return: ''' query_data = es.search( index=index, scroll=scroll, timeout=timeout, size=size, body=body ) result_data = query_data.get("hits").get("hits") if not result_data: return [] scroll_id = query_data["_scroll_id"] total = query_data["hits"]["total"]["value"] for i in range(int(total / 1000)): res = es.scroll(scroll_id=scroll_id, scroll='5m') result_data += res["hits"]["hits"] l = [i["_source"] for i in result_data] return l def copy_index_es(from_index,doc_type): ''' es表复制备份方法 :param from_index: 需要备份表名字 :param to_index:新表名字 :return: ''' es=conn_es() body = { "query": { "match_all": { } } } data = get_data_from_es(es=es, index=from_index, doc_type=doc_type, body=body) data_key_tuple = [tuple(k) for k in data][0] data_value_list_all = [] for i in data: data_value = [] for k, v in i.items(): data_value.append(v) data_value_list_all.append(tuple(data_value)) crdt = datetime.datetime.now() crdt_str = crdt.strftime("%Y%m%d%H%M%S") to_index=from_index+'_bak'+crdt_str actions = [{'_op_type': 'index', '_index': to_index, '_type': doc_type, '_source': dict(zip(data_key_tuple, item))} for item in data_value_list_all] print(u'开始备份表',from_index,u'===>',to_index,u'当前时间',crdt) helpers.bulk(es, actions) crdt_after = datetime.datetime.now() crdt_after_str = crdt_after.strftime("%Y%m%d%H%M%S") print(u'备份表', from_index, u'===>', to_index,u'完成,', u'当前时间', crdt_after_str) def delete_data_index(index_name): ''' es表清空数据的方法 :param index_name: 需要清空数据的index :return: ''' es = conn_es() body = { "query": { "match_all": { } } } data = get_data_from_es(es=es, index=index_name, doc_type="doc", body=body) crdt = datetime.datetime.now() crdt_str = crdt.strftime("%Y%m%d%H%M%S") print(u'开始清空表', index_name, u'当前时间', crdt) es.delete_by_query(index=index_name, body=body) crdt_after = datetime.datetime.now() crdt_after_str = crdt_after.strftime("%Y%m%d%H%M%S") print(u'清空表', index_name, u'完成,', u'当前时间', crdt_after_str) if __name__ == '__main__': print(u'以下是python操作es的各种方法') print(u'1.以当前时间备份index') #copy_index_es('piccvou_piccappdata','doc') print(u'2.清空index数据,不删除表结构') #delete_data_index('piccvou_piccappdata_bak20200921134456')