当前位置: 首页 > news >正文

【Elasticsearch系列】Elasticsearch中的分页

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
img

  • 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等
    • 常用开发工具系列:常用的开发工具,IDEA,Mac,Alfred,Git,typora 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 新空间代码工作室:提供各种软件服务,承接各种毕业设计,毕业论文等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

博客目录

    • 一.基本介绍
    • 二.代码实战
      • 1.console 查询
      • 2.代码查询

一.基本介绍

在 Elasticsearch (ES) 中进行分页查询主要有三种方式:from + sizesearch_afterscroll。每种方式都有其适用场景和优缺点。
在这里插入图片描述

  1. from + size:这是最基本的分页方式,通过指定from(起始位置)和size(每页数量)来获取数据。它简单易用,适用于数据量不大或不需要深度分页的场景。但是,当from值很大时,性能会下降,因为需要合并和排序所有分片返回的结果。ES 默认的max_result_window限制了最大分页数,通常为 10000,这意味着from + size的值不能超过这个限制。如果需要处理大量数据或深度分页,这种方式可能不是最佳选择。

  2. search_after:这种方式适用于需要深度分页的场景,它通过使用上一页的最后一个文档的排序值来获取下一页数据,因此可以有效地避免深度分页的性能问题。这种方式的优点是性能较好,不存在深度分页问题,能够反映数据的实时变更。但是,它需要一个全局唯一的字段来排序,且实现相对复杂,每次查询都需要上次查询的结果。

  3. scroll:scroll API 允许你“游走”或“滚动”通过大量结果,而不需要使用深度分页。它通过维护一个活跃的搜索上下文来实现,这个上下文会在指定的时间内保持开启状态。scroll 适用于需要遍历大量数据的场景,但牺牲了数据的实时性,因为 scroll 查询是基于初始查询时的快照数据。这种方式的优点是查询效率高,尤其适合于数据导出或批量处理,但缺点是需要维护 scroll ID 和历史快照,对服务器资源有一定的消耗。

选择哪种分页方式取决于具体的需求和场景。对于大多数常见的分页需求,from + size可能足够使用。但如果需要处理大量数据或进行深度分页,那么scrollsearch_after可能是更好的选择。在实际应用中,需要根据数据量、查询频率、实时性要求等因素综合考虑。
在这里插入图片描述

二.代码实战

1.console 查询

GET _search
{"query": {"match_all": {}}
}GET /GET /_cluster/healthGET /_cat/health?vGET /db01_v1_20240903-index/_searchGET /db01_v1_20240903-index/_search?from=0&size=10POST /db01_v1_20240903-index/_search
{"from": 0,"size": 10,"_source": ["_id", "id", "source", "target", "description", "weight"],"query": {"query_string": {"query": "source:*應用*","default_field": "source","fuzziness": 1}}}GET /db01_v1_20240903-index/_search?from=0&size=10POST /db01_v1_20240903-index/_search
{"from": 0,"size": 10,"query": {"query_string": {"query": "subject_id:*我照顧的人*","default_field": "subject_id","fuzziness": 1}}
}POST /db01_v1_20240903-index/_search
{"from": 0,"size": 10,"query": {"match": {"subject_id": {"query": "照顧","fuzziness": 1}}}
}

2.代码查询

def list_label_readable(self, name, page, page_size, label):all_docs = []if page < 1 or page_size <= 0:return all_docs, 0label_dict = QueryEnum.query_info.value[label]index_name = self.index_prefix + label_dict['index_name']response = self._es.search(index=index_name,body={"from": (page - 1) * page_size,"size": page_size,"_source": label_dict['_source'],"query": {"query_string": {"query": f"{label_dict['query_name']}:*{name}*","default_field": f"{label_dict['query_name']}","fuzziness": label_dict['fuzziness']}}if label == QueryEnum.ENTITIES.value or label == QueryEnum.RELATIONSHIPS.value else{"match": {f"{label_dict['query_name']}":{"query": f"{name}","fuzziness": label_dict['fuzziness']}}},},)total = response['hits']['total']['value']hits = response['hits']['hits']for hit in hits:_source = hit['_source']_source['_id'] = hit['_id']all_docs.append(_source)return all_docs, total

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

img

http://www.lryc.cn/news/435322.html

相关文章:

  • NLTK:一个强大的自然语言处理处理Python库
  • NUUO网络视频录像机 css_parser.php 任意文件读取漏洞复现
  • 【支付】Stripe支付通道Java对接(产品 价格 支付 查询 退款 回调)
  • Unity3D 小案例 像素贪吃蛇 01 蛇的移动
  • 【STM32 MCU】stm32MCUs 32-bit Arm Cortex-M
  • html+css网页设计 旅游 雪花旅行社5个页面
  • vue3中的实例
  • 9.测试计划(包含笔试/面试题)
  • 这 7 款AI应用将让你全新的iPhone 16成为电影制作的强大工具
  • 自注意力机制(self-attention)
  • Nuxt3入门:过渡效果(第5节)
  • 【开发工具】IntelliJ IDEA插件推荐:Json Helper——让JSON处理更高效
  • Lua垃圾回收机制
  • Java学习路线:详细指引
  • 商家转账到零钱如何开通-微信支付
  • 自研商家如何快速接入电商平台订单数据?
  • Win10下借助CMake编译OpenMVS
  • 04_定时器与数码管基础
  • Python 数学建模——方差分析
  • 计算机视觉中,什么是上下文信息(contextual information)?
  • YOLOv5改进 | 模块缝合 | C3 融合RVB + EMA注意力机制【二次融合】
  • mysql 更改默认端口号 新增用户密码 赋予权限
  • 吐血整理nacos 作为springcloud的配置中心和注册中心
  • 【秋招笔试】9.09阿里国际秋招(已改编)-三语言题解
  • sql语句在sqlserver中能查询出结果,但是代码中查不出来
  • 【机器学习】决策树与随机森林:模型对比与应用案例分析
  • Apache SeaTunnel基础介绍
  • 阿里旗下土耳其电商Trendyol计划进军欧洲市场
  • IBM中国研发裁员与AIGC浪潮下的中国IT产业新篇章:挑战、机遇与未来展望
  • 基于Python的影视推荐平台的设计与实现--附源码79147