【Elasticsearch】检索排序 分页

检索排序 & 分页

  • 1.测试数据准备
  • 2.排序功能
    • 2.1 简单字段排序
    • 2.2 多字段排序
    • 2.3 日期排序
  • 3.分页功能
    • 3.1 基础分页
    • 3.2 深度分页(不推荐大数据量使用)
    • 3.3 使用 search_after 进行高效分页
  • 4.综合示例:高亮+排序+分页
  • 5.实践建议

1.测试数据准备

首先,我们创建一个名为 blog_posts 的索引,并插入一些测试数据:

PUT /blog_posts
{"mappings": {"properties": {"title": { "type": "text" },"content": { "type": "text" },"author": { "type": "keyword" },"views": { "type": "integer" },"publish_date": { "type": "date" },"tags": { "type": "keyword" }}}
}
POST /blog_posts/_bulk
{"index":{}}
{"title":"Elasticsearch Basics","content":"Learn the basics of Elasticsearch and how to perform simple queries.","author":"John Doe","views":1500,"publish_date":"2023-01-15","tags":["search","database"]}
{"index":{}}
{"title":"Advanced Search Techniques","content":"Explore advanced search techniques in Elasticsearch including aggregations and filters.","author":"Jane Smith","views":3200,"publish_date":"2023-02-20","tags":["search","advanced"]}
{"index":{}}
{"title":"Data Analytics with ELK","content":"How to use the ELK stack for data analytics and visualization.","author":"John Doe","views":2800,"publish_date":"2023-03-10","tags":["analytics","elk"]}
{"index":{}}
{"title":"Elasticsearch Performance Tuning","content":"Tips and tricks for optimizing Elasticsearch performance in production environments.","author":"Mike Johnson","views":4200,"publish_date":"2023-04-05","tags":["performance","optimization"]}
{"index":{}}
{"title":"Kibana Dashboard Guide","content":"Creating effective dashboards in Kibana for monitoring and analysis.","author":"Jane Smith","views":1900,"publish_date":"2023-05-12","tags":["kibana","visualization"]}

在这里插入图片描述

2.排序功能

能排序的字段都具备正排索引,单 text 类型字段是不可以排序的。如果要使 text 字段支持排序、聚合,则需要开启 fielddata

sort 是和 query 平级的,并不会被 query 包含。

2.1 简单字段排序

GET /blog_posts/_search
{"query": {"match_all": {}},"sort": [{"views": {"order": "desc"}}]
}

在这里插入图片描述

2.2 多字段排序

GET /blog_posts/_search
{"query": {"match_all": {}},"sort": [{"author": {"order": "asc"}},{"views": {"order": "desc"}}]
}

在这里插入图片描述

2.3 日期排序

GET /blog_posts/_search
{"query": {"match_all": {}},"sort": [{"publish_date": {"order": "desc"}}]
}

在这里插入图片描述

3.分页功能

Elasticsearch 支持对查询结果进行分页处理,允许用户逐步获取和浏览大量数据。

在编写查询语句时,可通过再请求体中添加 fromsize 字段实现分页。from 表示结果集的起始位置,而 size 表示每页返回的文档数量。

如果将 from 设置为 11 11 11size 设置为 5 5 5,则返回的是第 10 10 10 ~ 14 14 14 条数据(默认从第 0 0 0 条开始)。

3.1 基础分页

GET /blog_posts/_search
{"query": {"match_all": {}},"from": 0,"size": 2,"sort": [{"publish_date": {"order": "desc"}}]
}

在这里插入图片描述

3.2 深度分页(不推荐大数据量使用)

深度分页 指的是在 Elasticsearch 中查询结果集 非常靠后的页码(例如第 1000 1000 1000 页,每页 10 10 10 条数据,即 from=10000)。它通常表现为使用 from + size 参数组合来获取远端的分页数据。

❌ 不推荐的详细原因可参考我的另一篇博客:《【Elasticsearch】深度分页及其替代方案》。

当然,我们这里测试的数据没有那么多。

GET /blog_posts/_search
{"query": {"match_all": {}},"from": 3,"size": 2
}

在这里插入图片描述

3.3 使用 search_after 进行高效分页

首先获取第一页:

GET /blog_posts/_search
{"query": {"match_all": {}},"size": 2,"sort": [{"views": {"order": "desc"}},{"_id": {"order": "asc"}}]
}

在这里插入图片描述

然后使用最后一个结果的排序值获取下一页:

GET /blog_posts/_search
{"query": {"match_all": {}},"size": 2,"search_after": [3200, "上一页最后一个文档的ID"],"sort": [{"views": {"order": "desc"}},{"_id": {"order": "asc"}}]
}

在这里插入图片描述
在这里插入图片描述

4.综合示例:高亮+排序+分页

GET /blog_posts/_search
{"query": {"multi_match": {"query": "search","fields": ["title", "content"]}},"highlight": {"fields": {"title": {},"content": {"fragment_size": 100,"number_of_fragments": 2}}},"sort": [{"views": {"order": "desc"}}],"from": 0,"size": 3
}

在这里插入图片描述

5.实践建议

功能
实践建议
高亮
  • 对于大文本字段,限制 fragment_sizenumber_of_fragments 以提高性能。
  • 考虑使用 require_field_match: true 来只高亮查询中指定的字段。
排序
  • 对于文本字段排序,使用 .keyword 子字段或设置 fielddata: true
  • 避免对未索引或分析的字段进行排序。
  • 对于分页场景,使用包含唯一值的排序条件(如 _id)。
分页
  • 避免深度分页(超过 1000 1000 1000 条记录)),使用 search_after 代替。
  • 对于无限滚动等场景,优先考虑 search_after 而不是 from/size
  • 考虑使用滚动 API(Scroll API)对于大数据量导出场景。

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

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

相关文章

Delta、Jackknife、Bootstrap

用班级平均身高的案例,展示 ​Delta、Jackknife、Bootstrap​ 的完整计算过程。 ​0. 数据准备​ ​原始数据(4个学生的身高)​​: 真实均值(目标统计量)​​: ​1. Delta 方法(公式…

企业智脑技术架构设计:紧贴企业场景规划面向未来的发展趋势与实现路径

摘要 本文深入探讨了企业智脑技术架构的设计理念与发展趋势,分析了当前企业智能化转型的技术需求与挑战,提出了一个面向未来的企业智脑技术架构设计方案。文章从底层技术支撑、核心能力构建、应用场景适配、安全合规保障以及未来发展路径五个维度展开论…

新手向:Python方向讲解

从NASA火星任务到TikTok推荐算法,从自动化脚本到量子计算,Python用import antigravity重新定义了编程边界 一、设计哲学:优雅明确的编程禅学 Python之禅(import this): 优美胜于丑陋(Beautifu…

Chrome谷歌浏览器插件ModHeader,修改请求头,开发神器

文章目录一、介绍与下载二、使用一、介绍与下载 ModHeader顾名思义就是让我们可以自定义HTTP请求头或者是重写响应头,包括新增请求头/响应头或者覆盖Chrome浏览器设置的请求头的默认值,同时还可以根据URL Pattern来只对特定网站生效。 有条件的同学可以…

SEW:无监督预训练在语音识别中的性能-效率权衡

摘要 本文研究了自动语音识别(ASR)中预训练模型的性能-效率权衡问题。我们聚焦于 wav2vec 2.0,并形式化了多种影响模型性能和效率的架构设计。基于所有观察结果,我们提出了 SEW(Squeezed and Efficient Wav2vec&#…

linux系统部署express+vue项目

一、准备阶段: 1、安装linux上所需要的环境:npm nodejs nginx pm2 //安装 npm(Node 包管理器) sudo apt install npm//判断是否安装成功 npm -v//安装 Node.js(可以根据需要选择版本) sudo apt inst…

PixiJS教程(004):点击事件交互

1.6 事件交互实现要求:点击宝剑,修改宝剑的颜色。1️⃣实现代码: // 为精灵添加交互事件 sprite.interactive true; sprite.on(click, () > {// 点击精灵时,改变精灵的颜色sprite.tint Math.random() * 0xFFFFFF; });说明&am…

创客匠人助力家庭教育IP破局:从0到1打造创始人个人品牌全攻略

一、IP定位:细分赛道的精准锚定与用户画像构建 在家庭教育8000亿市场规模的竞争中,创始人IP的差异化定位成为破局关键。创客匠人通过“标签化定位”工具,帮助教育者锁定垂直领域,如亲子沟通、青春期教育等细分赛道。以景丽霞老师…

使用坚果云扩容Zotero同步空间的简单快捷方法

本文介绍基于坚果云的WebDAV协议,用于文献管理软件Zotero的文件同步,从而实现Zotero存储空间扩容的方法。 在之前的文章Zotero文献管理软件入门使用方法:软件下载、文献导入、引文插入(https://blog.csdn.net/zhebushibiaoshifu/a…

Java启动脚本

Java启动脚本 编写代码,然后打包 Java-1.0-SNAPSHOT.jar public class test {public static void main(String[] args) {System.out.println("Hello IDEA");} }编写运行脚本 #!/bin/sh WORKDIR$(cd $(dirname $0); pwd) cd $WORKDIRexport JAVA_OPTS"…

VSCode使用ssh远程连接阿里云

1. 终端选择 Windows使用PowerShell Ubuntu和Mac使用Terminal 2. 设置ssh 2.1. 第一台电脑 生成密钥 ssh-keygen -o -t rsa -b 4096 -C "emailexample.com" 按三次回车 查看密钥 cat ~/.ssh/id_rsa.pub 拷贝密钥,粘贴到服务器的密钥框中 2.2. 第…

XLSR-Wav2Vec2:用于语音识别的无监督跨语言表示学习

摘要 本文提出了 XLSR,该方法通过从多种语言的原始语音波形中预训练单个模型,以学习跨语言的语音表示。我们基于 wav2vec 2.0 构建模型,该方法通过对掩蔽后的潜在语音表示解决对比任务进行训练,并联合学习在多种语言之间共享的潜…

图灵完备之路(数电学习三分钟)----数据选择器与总线

1.数据选择器之前我们学习了逻辑与算数的计算,得知两个数字之间的加减和与或的结果是不同的,而一个通用的数字电路不可能只有一个功能,所以我们将在本节引入电路选择器这一“器件”,来实现对两个输入的运算方式的选择,…

Linux下如何设置CUDA的路径

今天遇到一个关于CUDA的问题,我要跑的深度学习代码,他里面有cuda编程,需要编译。但是你运行就报错。 代码提示我大段报错。 (score-denoise) ubuntuGPUA10002:~/wbd/score-denoise_Transformerdepth20$ python train.py Detected CUDA fil…

js树的排序

树 树的前中后序遍历 树是一种重要的非线性数据结构,尤其是二叉树。二叉树的遍历是操作树的基础,主要有前序遍历、中序遍历和后序遍历三种方式。 前序遍历 访问顺序:根结点 -> 左子树 -> 右子树。 遍历规则:首先访问根结…

解码 Red Stuff:Walrus 高效可靠存储的引擎

Red Stuff 是 Walrus 所采用的二维(2D)纠删码协议,定义了数据如何被编码和存储。它是实现高效、安全、且高可用的去中心化存储的关键。通过 Red Stuff,Walrus 成功解决了去中心化存储系统常见的三大难题:安全性、复制效…

【ACP】阿里云云计算高级运维工程师--ACP

文章目录1、简要介绍2、核心特点3、考试相关信息4、适合人群1、简要介绍 阿里云云计算认证ACP(Alibaba Cloud Certified Professional)是面向云计算技术与应用从业者的专业级认证,旨在评估考生对阿里云云计算产品的理解、部署、运维及最佳实…

快速掌握Python编程基础

干货分享,感谢您的阅读!备注:本博客将自己初步学习Python的总结进行分享,希望大家通过本博客可以在短时间内快速掌握Python的基本程序编码能力,如有错误请留言指正,谢谢!(持续更新&a…

「Java案例」鸡兔同笼问题

案例解析 鸡兔同笼求解 《孙子算经》是中国古代重要的数学著作,成书于南北朝时期,其中就记载了一个有趣的问题:鸡和兔在同一个笼子里,鸡和兔共有n条腿, m个头,问鸡和兔各有多少只?编写一个程序…

BLDC电机-运动控制---stm32时钟树定时器SYSTICKRTC的学习

一、时钟树 二、基本定时器 三、通用定时器 四、高级定时器 五、SYSTICK 六、RTC