太强了!利用 Python 连接 ES 查询索引某个字段命中数的脚本!

作者:JackTian

来源:公众号「杰哥的IT之旅」

ID:Jake_Internet

转载请联系授权(微信ID:Hc220088)

原文链接:太强了!利用 Python 连接 ES 查询索引某个字段命中数的脚本!

当我们在工作中,如果频繁查询 Elasticsearch 某个索引中的某个字段命中的记录数量时,可以通过 Python 的 Elasticsearch 库来查询,从而提升工作效率。

代码大致思路如下:

第一步:从 elasticsearch 模块导入 Elasticsearch 类,该类是用来连接和操作 Elasticsearch

第二步 :安装 Elasticsearch 库,若未安装 elasticsearch 模块,可执行:pip install elasticsearch命令进行安装

第三步:连接 Elasticsearch,定义 Elasticsearch 对象,并指定所要连接的 URL、端口、用户名、密码、超时时间

第四步 :指定所要查询的索引,定义名为index_name的变量,值为:es 的索引名,在 Elasticsearch 中,索引是一个类似数据库的概念,用于存储数据

第五步 :创建查询条件,定义名为query的字典,该字典包含了查询条件。

查询条件是一个bool类型的查询,其中包含了多个terms查询,每个terms查询是用来匹配commandId字段等于指定值的记录

第六步 :执行查询并获取结果,使用es.search()方法执行查询,并将结果存储在results变量中。这个结果是一个字典,包含了查询的结果和其他相关信息

第七步 :打印聚合统计信息,循环遍历结果字典中的aggregations字段,并打印每个commandId的值及其对应的记录总数

完整代码如下:

python3 复制代码
# 精准匹配多个指令ID,查询有多少条日志
from elasticsearch import Elasticsearch  
  
# 如果没有 elasticsearch 模块,执行如下命令进行安装。  
# pip install elasticsearch  
  
# 连接 Elasticsearch  
es = Elasticsearch(hosts="http://localhost:29204/", http_auth=("elastic", "elastic"), timeout=30)  
  
# 指定要查询的索引  
index_name = 'idc_payloadresult_20231204'  
  
# 查询条件  
query = {  
    "query": {  
        "bool": {  
            "must": [  
                {  
                    "terms": {  
                        "commandId": ["1024", "2048", "3072", "4096", "5120"]  
                    }  
                }  
            ],  
            "must_not": [],  
            "should": []  
        }  
    },  
    "from": 0,  
    "size": 10,  
    "sort": [],  
    "aggs": {  
        "commandId_counts": {  
            "terms": {  
                "field": "commandId",  
            },  
            "aggs": {  
                "total_count": {  
                    "sum": {  
                        "field": "total"  
                    }  
                }  
            }  
        }  
    }  
}  
  
# 执行查询并获取结果  
results = es.search(index=index_name, body=query)  
  
# 打印结果中的聚合统计信息,包括每个 commandId 的总数  
for bucket in results['aggregations']['commandId_counts']['buckets']:  
    print(bucket)

以上就是今天所要分享的全部内容了。

如果你觉得这篇文章对你有点用的话,为本文点个赞留个言 或者转发一下,让更多的朋友看到,因为这将是我持续输出更多优质文章的最强动力!

相关推荐
哥本哈士奇(aspnetx)37 分钟前
Streamlit + LangChain 1.0 简单实现智能问答前后端
python·大模型
极限实验室1 小时前
APM(一):Skywalking 与 Easyearch 集成
数据库·云原生
我一定会有钱1 小时前
斐波纳契数列、end关键字
python
饕餮争锋1 小时前
SQL条件中WHERE 1=1 的功能
数据库·sql
玄斎2 小时前
MySQL 单表操作通关指南:建库 / 建表 / 插入 / 增删改查
运维·服务器·数据库·学习·程序人生·mysql·oracle
小鸡吃米…2 小时前
Python 列表
开发语言·python
编织幻境的妖2 小时前
SQL查询连续登录用户方法详解
java·数据库·sql
编程小Y3 小时前
MySQL 与 MCP 集成全解析(核心原理 + 实战步骤 + 应用场景)
数据库·mysql·adb
星依网络3 小时前
yolov5实现游戏图像识别与后续辅助功能
python·开源·游戏程序·骨骼绑定
大佐不会说日语~3 小时前
Spring AI Alibaba 的 ChatClient 工具注册与 Function Calling 实践
人工智能·spring boot·python·spring·封装·spring ai