python查询elasticsearch 获取指定字段的值的list

python 复制代码
from elasticsearch import Elasticsearch
from datetime import datetime, timedelta

# 1.connect to Elasticsearch------------------------------------------------------------------------------------------------------
# prod连接到 Elasticsearch
es_of_prod = Elasticsearch('http://host:port', http_auth=("username", "pwd"), verify_certs=False, timeout=60)

# 2.构建KQL-----------------------------------------------------------------------------------------------------------------------
# 查询index
index_of_query = "index-name"
# 获取当前时间并减去1小时
current_time = datetime.now()
previous_hour_time = current_time - timedelta(hours=1)
# 格式化为 "年-月-日 时"
previous_hour_time_formatted = previous_hour_time.strftime("%Y-%m-%d %H")
# 格式化为 "年-月-日 时:分"
previous_hourAndMin_time_formatted = previous_hour_time.strftime("%Y-%m-%d %H:%M")
# 构建 KQL 查询字符串
kql_query_xxx_prod = 'context:"*{query String}*" AND ext.time:"*'+previous_hour_time_formatted+'*"'
# 构建 KQL 查询字符串
kql_query_xxx_prod_hourAndMin = 'context:"*{query String}*" AND ext.time:"*'+previous_hourAndMin_time_formatted+'*"'
print(f"query condition: {kql_query_xxx_prod_hourAndMin}")

# 3.构建KQL JSON------------------------------------------------------------------------------------------------------
# 当天 0 点
zero_today = current_time.replace(hour=0, minute=0, second=0, microsecond=0)
# 当天 24 点(直接取次日 0 点)
midnight_24 = zero_today + timedelta(days=1)
#环境情况:sit env:es version7.5.1,prd env:es version7.15.1,下面query_json在sit环境可以使用,在prd环境不能使用
kql_query_xxx_json = {
    "query": {
        "bool": {
            "must": [
                        {
                            "query_string": {
                                "query":kql_query_xxx_prod_hourAndMin,
                                "default_field": "*"  # 搜索所有字段
                            }
                        },
                        {
                            "range": {
                                "@timestamp": {
                                    "gte": zero_today,  # 当天00:00:00
                                    "lt": midnight_24,   # 第二天00:00:00
                                    "time_zone": "+08:00"  # 指定时区(如北京时间)
                                }
                            }
                        }
                    ]
        }
    }
}
# 4.es执行查询获得hits count大小---------------------------------------------------------------------------------------------------
previous_hour_xxx_count = es_of_prod.count(
    index = index_of_query,
    body = kql_query_xxx_json
)
print(f"previous_hour_xxx_count: {previous_hour_xxx_count['count']}")

# 5.执行查询,获取某个字段的value的list----------------------------------------------------------------------------------------------
query_body = {
    "query_string": {
        "query": kql_query_xxx_prod_hourAndMin,
        "default_field": "*",
        "analyze_wildcard": True,
        "lenient": True
    }
}
#size=10000,如果不设置size,默认只返回前10条数据
try:
    response = es_of_prod.search(
        index = index_of_query,
        query = query_body,
        size=10000
    )
    total = response['hits']['total']['value']
    print(f"获取到total:{total}")
    traceids = [hit['_source']['ext.traceId'] for hit in response['hits']['hits']]
    print(f"获取到{len(traceids)}条traceid记录")
    #可以遍历traceids,做后续的业务处理
except Exception as e:
    print(f"查询异常: {str(e)}")
    traceids = []
相关推荐
w_t_y_y1 分钟前
机器学习常用的python包(二)工具箱scikit-learn
python·机器学习·scikit-learn
Elastic 中国社区官方博客6 分钟前
使用 Jina-VLM 小型多语言视觉语言模型来和图片对话
大数据·人工智能·elasticsearch·语言模型·自然语言处理·jina
用户83562907805112 分钟前
Python 自动拆分 Word 文档教程:按分节符与分页符处理
后端·python
陈天伟教授14 分钟前
心电心音同步分析-案例:原型设计一
开发语言·人工智能·python·语言模型·架构
我的xiaodoujiao15 分钟前
API 接口自动化测试详细图文教程学习系列9--Requests模块
python·学习·测试工具·pytest
Allen_LVyingbo17 分钟前
量子计算Dirac Notation基本教学—从零基础到读懂量子信息论文(下)
开发语言·人工智能·python·数学建模·量子计算
LDG_AGI30 分钟前
【搜索引擎】Elasticsearch(二):基于function_score的搜索排序
数据库·人工智能·深度学习·elasticsearch·机器学习·搜索引擎·推荐算法
Dxy123931021642 分钟前
Python路径算法简介
开发语言·python·算法
躺平的赶海人1 小时前
python opencv实现相机内参标定之安装OpenCv
python·opencv·计算机视觉
满满和米兜1 小时前
【Java基础】-I/O-字符流
java·开发语言·python