python 通过 SQL 分页查询大量Elasticsearch数据的方法

import time
from elasticsearch import Elasticsearch
from base.config import config
import logging
logging.getLogger("requests").setLevel(logging.WARNING)
logging.getLogger("elasticsearch").setLevel(logging.WARNING)
def inites():
    host = config["es"]["host"]
    port = config["es"]["port"]
    # es = Elasticsearch(hosts=host, port=port, timeout=200)
    es = Elasticsearch(hosts=host, port=port, timeout=200 , http_auth=(config["es"]["user"],config["es"]["pwd"]))
    return es

def sql(data=[],**sq):
    es=inites()
    if not sq:
        return False
    rows=es.sql.query(sq)
    if not rows:
        return False
    else:
        for row in rows["rows"]:
            data.append(row)
    if "fetch_size" in sq.keys():
        if len(rows["rows"])==sq["fetch_size"]:
            return sql(data,cursor=rows["cursor"],fetch_size=sq["fetch_size"])
    return data



#应用

def fetch_1day_ldap_auth():
    data=[]
    now = time.strftime('log_topic_micr_%Y.%m.%d', time.localtime(time.time()-24 * 60 * 60))
    query=f"SELECT COUNT(*) AS count,IpAddress FROM \"{now}\" WHERE PackageName = 'PACKAGE_V1_0' group by IpAddress"
    rows = es.sql(query=query,fetch_size=10000)
    if rows:
        for row in rows:
            if row[0] and row[1]:
                data.append({"count":row[0],"ipaddress":row[1]})
        data.sort(key= lambda item: item["count"],reverse=True)
    return data

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值