Elasticsearch 查询超过10000 的解决方案 - Python

文章目录

    • Elasticsearch 查询超过10000 的解决方案 - Python
      • 法1:修改 设置 max_result_size (不推荐)
      • 法2: scroll 分页
      • 法3: search_after 分页

Elasticsearch 查询超过10000 的解决方案 - Python

法1:修改 设置 max_result_size (不推荐)

# 调大查询窗口大小,比如100w (不推荐,慎用)
PUT test/_settings
{"index.max_result_window": "1000000"
}# 查看 查询最大数
GET test/_settings
---
{"demo_scroll" : {"settings" : {"index" : {"number_of_shards" : "5","provided_name" : "demo_scroll","max_result_window" : "1000000","creation_date" : "1680832840425","number_of_replicas" : "1","uuid" : "OLV5W_D9R-WBUaZ_QbGeWA","version" : {"created" : "6082399"}}}}
}

法2: scroll 分页

    def getData(self):current_time = datetime.datetime.now()one_hour_ago = current_time - datetime.timedelta(hours=24)current_time_str = current_time.strftime('%Y-%m-%d %H:%M:%S')hours_ago_str = one_hour_ago.strftime('%Y-%m-%d %H:%M:%S')# 改为从elasticsearch读取数据es = Elasticsearch(hosts='http://127.0.0.1/9200',timeout=1200)size = 10000query_scroll = {"size": size,"query": {"range": {"create_time.keyword": {"gte": hours_ago_str.__str__(),"lte": current_time_str.__str__()}}},"_source": ["ip_address", "OS", "host", "user", "create_time"],}scroll = "10m" # 该次连接超时时间设置result = []# firstinit_res = es.search(index="nac-users", body=query_scroll, scroll=scroll)scroll_id = init_res["_scroll_id"]for item in init_res["hits"]["hits"]:result.append({'id': item['_id'],'ip_address': item['_source']['ip_address'],'operating_system': item['_source']['OS'],'hostname': item['_source']['host'],'username': item['_source']['user'],'date_t': item['_source']['create_time'],})i = 0while i < 16:  # 剩下的数据 一天 24 小时数据估计不会超过 160000res = es.scroll(scroll_id=scroll_id, scroll=scroll)if len(res["hits"]["hits"]) == 0:breakfor item in res["hits"]["hits"]:result.append({'id': item['_id'],'ip_address': item['_source']['ip_address'],'operating_system': item['_source']['OS'],'hostname': item['_source']['host'],'username': item['_source']['user'],'date_t': item['_source']['create_time'],})i = i + 1# 原始的    # {"query": {"match_all": {}}, "size": 10000}# res = es.search(index="nac-users", body=query_scroll)## result = []# for item in res['hits']['hits']:#     result.append({#         'id': item['_id'],#         'ip_address': item['_source']['ip_address'],#         'operating_system': item['_source']['OS'],#         'hostname': item['_source']['host'],#         'username': item['_source']['user'],#         'date_t': item['_source']['create_time'],#     })self.data = pd.DataFrame(result)

法3: search_after 分页

def getData(self):current_time = datetime.datetime.now()one_hour_ago = current_time - datetime.timedelta(hours=24)current_time_str = current_time.strftime('%Y-%m-%d %H:%M:%S')hours_ago_str = one_hour_ago.strftime('%Y-%m-%d %H:%M:%S')# 改为从elasticsearch读取数据es = Elasticsearch(hosts='http://127.0.0.1:9200',timeout=1200)size = 10000query_scroll = {"size": size,"query": {"range": {"create_time.keyword": {"gte": hours_ago_str.__str__(),"lte": current_time_str.__str__()}}},"sort": [{"create_time.keyword": {"order": "desc"}}],"_source": ["ip_address", "OS", "host", "user", "create_time"],}result = []init_res = es.search(index="nac-users", body=query_scroll)if len(init_res["hits"]["hits"]) == 0:self.data = pd.DataFrame(result)returnsort = init_res["hits"]["hits"][0]["sort"] # 我这里是用时间来排序的,所以取到的是时间字段for item in init_res["hits"]["hits"]:result.append({'id': item['_id'],'ip_address': item['_source']['ip_address'],'operating_system': item['_source']['OS'],'hostname': item['_source']['host'],'username': item['_source']['user'],'date_t': item['_source']['create_time'],})i = 0while i < 16:query_scroll["search_after"] = sortres = es.search(index="nac-users", body=query_scroll)sort = res["hits"]["hits"][0]["sort"]if len(res["hits"]["hits"]) == 0:breakfor item in res["hits"]["hits"]:result.append({'id': item['_id'],'ip_address': item['_source']['ip_address'],'operating_system': item['_source']['OS'],'hostname': item['_source']['host'],'username': item['_source']['user'],'date_t': item['_source']['create_time'],})i = i + 1self.data = pd.DataFrame(result)        

还有一个方法是在参考文章2里面提到的track_total_hits,但是我测试的时候没起作用,目前还不太清楚原因。。。

我看参考文章里说到search_after 分页要比scroll快,但是在我的数据上是scroll要快很多,不是特别清楚,可能我这里的数据暂时只有2w多一点,感觉用到search_after 分页需要排序,可能是排序的字段的问题,时间字段我存的是字符串格式,,如有可以修改的地方,欢迎大家指正~ 有更多可以参考的方法欢迎贴在评论区供大家参考~

【参考1】https://juejin.cn/post/7224369270141993019
【参考2】https://blog.csdn.net/u011250186/article/details/125483759

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642110.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【源码】医院绩效管理系统,针对医、护、技、药、管不同岗位,可设置不同的核算方法、核算参数

医院绩效管理系统源码 医院绩效管理系统以国家医院绩效管理考核政策法规为依据&#xff0c;结合医院管理实践&#xff0c;以经济管理指标为核心&#xff0c;医疗质量、安全、效率、效益管理为重点&#xff0c;特别强调持续改进&#xff08;PDCA&#xff09;管理理念。实现医院绩…

《WebKit 技术内幕》学习之九(1): JavaScript引擎

1 概述 1.1 JavaScript语言 说起JavaScript语言&#xff0c;又要讲一个典型的从弱小到壮大的奋斗史。起初&#xff0c;它只是一个非常不起眼的语言&#xff0c;用来处理非常小众的问题。所以&#xff0c;从设计之初&#xff0c;它的目标就是解决一些脚本语言的问题&#xff…

[Android] Android架构体系(2)

文章目录 Bionic精简对系统调用的支持:不支持 System V IPC:有限的 Pthread 功能:有限支持C:不再支持本地化和/或宽字符:Bionic新增的特性系统属性硬编码写死的UID/GID内置了DNS解析硬编码写死的服务和协议 硬件抽象层Linux内核匿名共享内存(ASHMem)BinderLoggerION 内存管理内…

ZXing开源库生成二维码

引言 二维码&#xff08;QR Code&#xff09;作为一种快速、高容量、高密度的矩阵条码&#xff0c;已经在各行各业得到广泛应用。ZXing&#xff08;Zebra Crossing&#xff09;是一款由Google开源的Java二维码生成和解析库&#xff0c;提供了丰富的功能和易于使用的API。本篇博…

wikijs在启动项目时遇到的问题Database Initialization Error: create table “migrations“

问题 使用PostgreSQL安装wikijs过程中&#xff0c;启动项目运行node server时&#xff0c;会报错如下&#xff1a; error: Database Initialization Error: create table "migrations" ("id" serial primary key, "name" varchar(255), "b…

西瓜书学习笔记——Boosting(公式推导+举例应用)

文章目录 引言AdaBoost算法AdaBoost算法正确性说明AdaBoost算法如何解决权重更新问题&#xff1f;AdaBoost算法如何解决调整下一轮基学习器样本分布问题&#xff1f;AdaBoost算法总结实验分析 引言 Boosting是一种集成学习方法&#xff0c;旨在通过整合多个弱学习器来构建一个…

架构篇08:架构设计三原则

文章目录 合适原则简单原则演化原则小结 成为架构师是每个程序员的梦想&#xff0c;但并不意味着把编程做好就能够自然而然地成为一个架构师&#xff0c;优秀程序员和架构师之间还有一个明显的鸿沟需要跨越&#xff0c;这个鸿沟就是“不确定性”。 对于编程来说&#xff0c;本…

C Primer Plus(第六版)13.11 编程练习 第9题

/* 修改程序清单13.3 中的程序&#xff0c;从1开始&#xff0c;根据加入列表的顺序为每个单词编号。当程序下次运行 时&#xff0c;确保新的单词编号接着上次的编号开始。 */ //13.11-8.exe c 13.11-8.txt 13.11-8-1.txt 13.11-8-2.txt #include <stdio.h> #include <…

【Docker】在centos中安装nginx

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是平顶山大师&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《【Docker】安装nginx》。&#x1f3af;&#…

7+细胞焦亡+ceRNA+实验验证,如何脱离套路求创新?

导语 今天给同学们分享一篇生信文章“Dissection of pyroptosis-related prognostic signature and CASP6-mediated regulation in pancreatic adenocarcinoma: new sights to clinical decision-making”&#xff0c;这篇文章发表在Apoptosis期刊上&#xff0c;影响因子为7.2。…

【JAVA】我和我的第一个“对象”相遇

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-zAjv1fTLGQmnqncy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

安泰ATA-2082高压放大器如何驱动超声探头进行无损检测

无损检测技术是一种在不破坏或影响被检测物体性能的前提下&#xff0c;通过物理或化学方法对其内部或表面的缺陷进行检测的技术。在无损检测领域&#xff0c;超声检测是一种广泛应用的方法&#xff0c;而ATA-2082高压放大器则是实现高效、精确超声检测的关键设备之一。本期内容…

HTTPS基本概念

HTTP 与 HTTPS 有哪些区别&#xff1f; HTTP 是超文本传输协议&#xff0c;信息是明文传输&#xff0c;存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷&#xff0c;在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议&#xff0c;使得报文能够加密传输。HTTP 连接建立相…

CVE-2024-0738 Mldong ExpressionEngine RCE漏洞分析

漏洞描述 A vulnerability, which was classified as critical, has been found in ???? mldong 1.0. This issue affects the function ExpressionEngine of the file com/mldong/modules/wf/engine/model/DecisionModel.java. The manipulation leads to code injection…

【蓝桥备赛】数组分割——组合数学?

题目链接 数组分割 个人思路 两个数组都需要和为偶数&#xff0c;那么就去思考一个数组如何才能和是偶数呢&#xff1f;&#xff1f; 数组里肯定要么是奇数要么是偶数&#xff0c;偶数无论有多少个&#xff0c;都不会改变一个数组的奇偶性。但是奇数个奇数的和还是奇数&…

Vue+Element(el-switch的使用)+springboot

目录 1、编写模板 2、发送请求 3、后端返数据 1.Controller类 2.interface接口&#xff08;Service层接口&#xff09; 3.Service&#xff08;接口实现&#xff09; 4.interface接口&#xff08;Mapper层接口&#xff09; 5.xml 6.效果 4、el-switch属性 1、编写模板 …

Linux操作系统常用指令大全(一)

一、关机与重启指令 &#xff08;1&#xff09;shutdown - 关机 语法&#xff1a;shutdown shutdown -h now 【立即关机】 shutdown -h 1 【1分钟后关机&#xff0c;shutdown后不填默认一分钟后关机】 shutdown -r now 【立即重启】 &#xff08;3&#xff09;reboot - 重启 …

数字图像处理(实践篇)二十六 使用cvlib进行人脸检测、性别检测和目标检测

目录 1 安装cvlib 2 涉及的函数 3 实践 4 其他 cvlib一个简单,高级,易于使用的开源Python计算机视觉库。 1 安装cvlib # 安装依赖pip install opencv-python tensorflow# 安装cvlibpip install cvlib</

【最新!超详细C++入门】

01_C语言基础 一、课程目标 1、掌握 C基本语法&#xff1a;变量、常量、注释、标识符命名规范 2、掌握C数据类型 3、掌握C的输入和输出 4、掌握C运算符和表达式 5、掌握条件语句 6、掌握循环语句 二、课程内容 1 C初识 1.1 第一个C程序 编写一个C程序总共分为4个步骤…

iLO 安装中文固件包

前言 安装中文版本的安装包&#xff0c;需要把对应的ilo安装到固定的版本上&#xff0c;ilo的版本是2.70。必须是这个版本&#xff1b; 如果不是这个版本就需要刷到对应的ilo版本 下载对应的固件包。 到这个界面选择文件&#xff0c;然后点击上载。 以上就是刷系统包的步骤。 …