数据分析--Python连接ElasticSearch

Python连接ElasticSearch

python🔗一切

基于python建立与ElasticSearch的连接

// 加载相关库
from elasticsearch5 import Elasticsearch
import pandas as pd

// 定义ES连接函数,参数分别为ES服务器地址和ES复合查询语句
def func_ESQuery(query_url, table_name, query_body):
    es = Elasticsearch(query_url)
    // index表示数据库中的表名,body为ES复合查询语句-类SQL查询语句但会复杂一点,scroll表示游标有效期,request_timeout表示请求时长60s-若60s无响应会终止查询,size表示查询最大返回大小为10000条-数值太大会报错。
    query = es.search(index=table_name, body=query_body, scroll='20m', request_timeout=60, size=10000)

    results = query['hits']['hits']
    total = query['hits']['total']  # es查询出的结果总量
    print(total)
    scrl_id = query['_scroll_id']

    for i in range(round(total / 10000)):
        print(i)
        res = es.scroll(scroll_id=scrl_id, scroll='20m')
        results += res['hits']['hits']
    df_test = pd.DataFrame(results)
    return df_test

// ES服务器地址和端口号,一般默认端口号为9200
es_url = "http://xx.xx.xxx.xxx:9200/"
// 查询语句
query_json = {"query": {"bool": {"filter": [{"term": {"":""}},{"range": {"time": {"gte":"", "lt":""}}}]}},
"_source": [""], "sort":[{"时间字段":{"order":"asc"}}]} //最关键的是写查询体,类似写sql语句
// term对应的是单个关键分词搜索,格式是string; terms对应的是多个或的关系的分词的搜索,格式是list

trytimes = 0
while trytimes <= 5:
    try:
        df_conn =func_ESQuery(es_url,table_name,query_json)
        print("查询成功")
        df_pro = df_conn['_source']
        df_to_list = df_pro.values.tolist()
        list_to_df = pd.DataFrame(df_to_list)
        print(list_to_df.head())
        // 在这之后可以写处理数据的核心算法了
        
        trytimes = 1
        break
    except
        print('连接错误,第{}次重试...'.format(trytimes))
        trytimes += 1

加了一个while语句,是考虑到ES连接出现不稳定等因素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值