ElasticSearch DSL查询之排序和分页

一、排序功能

1. 默认排序

在 Elasticsearch 中,默认情况下,查询结果是根据 相关度 评分(score)进行排序的。我们之前已经了解过,相关度评分是通过 Elasticsearch 根据查询条件与文档内容的匹配程度自动计算得出的。如果不指定排序条件,Elasticsearch 会使用默认的相关度评分来排序查询结果。



2. 自定义排序

如果我们希望按照其他字段进行排序,而非使用默认的相关度排序(例如,按照价格、销量等字段),可以使用 sort 参数来指定排序字段。

排序字段的要求: 必须是数值类型、地理坐标或日期类型。

自定义排序的语法如下:

GET /indexName/_search
{"query": {"match_all": {}},"sort": [{"field": "asc"   // "排序字段":"排序方式" (asc:升序、desc:降序)}]
}
  • field:指定需要排序的字段名。asc(升序)或 desc(降序)。



3. 多字段排序

当需要根据多个字段进行排序时,我们可以在 sort 参数中指定多个字段。排序会根据数组中指定的顺序逐级进行:

  1. 首先按第一个字段排序。
  2. 如果第一个字段的值相同,则按第二个字段排序,以此类推。

例如,若我们需要先按销量排序,销量相同的情况下再按价格升序排序:



查询语句如下:

GET /items/_search
{"query": {"match_all": {}},"sort": [{"sold": "desc"  // 按销量降序排序},{"price": "asc"  // 销量相同,按价格升序排序}]
}

4. 排序结果说明

  • 排序后的查询结果不再根据相关度评分(_score)进行排序,因为我们已经指定了排序字段。
  • 结果中的 score 字段将为 null,因为排序不再依赖于相关度评分。
  • 查询结果将按照我们指定的排序字段进行排列。




二、分页功能

Elasticsearch 默认返回查询结果的前 10 条数据。如果我们希望查看更多数据,或者翻页查看查询结果,可以使用分页参数:fromsize

  • from:指定从第几条文档开始(类似于 SQL 中的 OFFSET)。
  • size:指定返回的文档数量(类似于 SQL 中的 LIMIT)。

分页的语法如下:

GET /items/_search
{"query": {"match_all": {}},"from": 0,   // 分页开始的位置,默认为0,从第 0 条开始"size": 10,   // 期望获取的文档总数,返回 10 条结果
}




三、分页与排序结合

在实际业务中,我们常常需要将分页和排序结合使用。

假设我们需要查询销量排名前 10 的商品,并且在销量相同的情况下按照价格升序排序。



查询语句:

GET /items/_search
{"query": {"match_all": {}},"sort": [{"sold": "desc"  // 按销量降序排序},{"price": "asc"  // 销量相同,按价格升序排序}],"from": 0,   // 从第 0 条开始"size": 10   // 返回 10 条结果
}

返回结果:




四、分页翻页

分页查询支持翻页功能。当我们查询第一页的结果时(from: 0, size: 10),若需要查看第二页的数据,可以将 from 设置为 10(即跳过前 10 条数据),然后返回接下来的 10 条数据:

GET /items/_search
{"query": {"match_all": {}},"sort": [{"sold": "desc"  // 按销量降序排序},{"price": "asc"  // 销量相同,按价格升序排序}],"from": 10,   // 跳过前 10 条数据,开始返回第 11 条"size": 10   // 返回 10 条结果
}




五、总结

  • 排序:通过 sort 参数指定排序字段,支持单字段排序和多字段排序。
  • 分页:通过 fromsize 参数控制返回数据的范围和条数。
  • 排序与分页结合:可以同时使用排序和分页功能,实现复杂的查询需求。

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

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

相关文章

【NLP基础】Word2Vec 中 CBOW 指什么?

【NLP基础】Word2Vec 中 CBOW 指什么? 重要性:★★ CBOW 模型是根据上下文预测目标词的神经网络(“目标词”是指中间的单词,它周围的单词是“上下文”)。通过训练这个 CBOW 模型,使其能尽可能地进行正确的…

资料03:【TODOS案例】微信小程序开发bilibili

样式 抽象数据类型 页面数据绑定 事件传参

vim文本编辑器

vim命令的使用: [rootxxx ~]# touch aa.txt #首先创建一个文件 [rootxxx ~]# vim aa.txt #vim进入文件aa.txt进行编辑 vim是vi的升级版,具有以下三种基本模式: 输入模式(编辑模式) 点击i进入编辑模式 (说明…

(undone) 并行计算学习 (Day2: 什么是 “伪共享” ?)

伪共享是什么? TODO: 这里补点文档!!!!!! 缓存一致性、同步的代价!!! 也就是,当不同线程所访问的内存元素恰好在同一个 cache line 上时&#xf…

基于python的博客系统设计与实现

摘要:目前,对于信息的获取是十分的重要,我们要做到的不是裹足不前,而是应该主动获取和共享给所有人。博客系统就能够实现信息获取与分享的功能,博主在发表文章后,互联网上的其他用户便可以看到,…

使用插件SlideVerify实现滑块验证

作者gitee地址:https://gitee.com/monoplasty/vue-monoplasty-slide-verify 使用步骤: 1、安装插件 npm install --save vue-monoplasty-slide-verify 2、在main.js中进行配置 import SlideVerify from vue-monoplasty-slide-verify; Vue.use(SlideV…

【深度学习项目】语义分割-FCN网络(原理、网络架构、基于Pytorch实现FCN网络)

文章目录 介绍深度学习语义分割的关键特点主要架构和技术数据集和评价指标总结 FCN网络FCN 的特点FCN 的工作原理FCN 的变体和发展FCN 的网络结构FCN 的实现(基于Pytorch)1. 环境配置2. 文件结构3. 预训练权重下载地址4. 数据集,本例程使用的…

2024年博客之星主题创作|从零到一:我的技术成长与创作之路

2024年博客之星主题创作|从零到一:我的技术成长与创作之路 个人简介个人主页个人成就热门专栏 历程回顾初来CSDN:怀揣憧憬,开启创作之旅成长之路:从平凡到榜一的蜕变持续分享:打卡基地与成长复盘四年历程&a…

【整体介绍】

ODO:汽车总行驶里程 Chime: 例如安全带没系的报警声音 多屏交互就是中控屏的信息会同步到主驾驶的仪表盘上 面试问题:蓝牙电话协议HFP 音乐协议A2DP 三方通话测试的逻辑

PyTorch使用教程(13)-一文搞定模型的可视化和训练过程监控

一、简介 在现代深度学习的研究和开发中,模型的可视化和监控是不可或缺的一部分。PyTorch,作为一个流行的深度学习框架,通过其丰富的生态系统提供了多种工具来满足这一需求。其中,torch.utils.tensorboard 是一个强大的接口&…

2025寒假备战蓝桥杯01---朴素二分查找的学习

文章目录 1.暴力方法的引入2.暴力解法的思考 与改进3.朴素二分查找的引入4.朴素二分查找的流程5.朴素二分查找的细节6.朴素二分查找的题目 1.暴力方法的引入 对于下面的这个有序的数据元素的组合,我们的暴力解法就是挨个进行遍历操作,一直找到和我们的这…

Qt按钮美化教程

前言 Qt按钮美化主要有三种方式:QSS、属性和自绘 QSS 字体大小 font-size: 18px;文字颜色 color: white;背景颜色 background-color: rgb(10,88,163); 按钮边框 border: 2px solid rgb(114,188,51);文字对齐 text-align: left;左侧内边距 padding-left: 10…

ESP32下FreeRTOS实时操作系统使用

ESP32下FreeRTOS实时操作系统使用 文章目录 ESP32下FreeRTOS实时操作系统使用一、概述二、为什么要使用实时操作系统RTOS?三、FreeRTOS任务3.1 什么是 FreeRTOS 任务?3.2 FreeRTOS 任务的特点3.3 FreeRTOS 任务的生命周期3.4 FreeRTOS 任务的状态3.5 Fre…

包文件分析器 Webpack Bundle Analyzer

webpack-bundle-analyzer 是一个非常有用的工具,用于可视化和分析 Webpack 打包生成的文件。这使得开发者能够更好地理解应用的依赖关系、包的大小,以及优化打包的机会。以下是关于 webpack-bundle-analyzer 的详细介绍,包括它的安装、使用以…

BEVFusion论文阅读

1. 简介 融合激光雷达和相机的信息已经变成了3D目标检测的一个标准,当前的方法依赖于激光雷达传感器的点云作为查询,以利用图像空间的特征。然而,人们发现,这种基本假设使得当前的融合框架无法在发生 LiDAR 故障时做出任何预测&a…

二十七、资源限制-LimitRange

LimitRange生产必备 在调度的时候 requests 比较重要,在运行时 limits 比较重要。 一、产生原因 生产中只有ResourceQuota是不够的 只配置ResourceQuotas的情况下,pod的yaml文件没有配置resources配置,都是0的话,就可以无限配置,永远达不到limit LimitRange做了什么 如…

计算机网络 (54)系统安全:防火墙与入侵检测

前言 计算机网络系统安全是确保网络通信和数据不受未经授权访问、泄露、破坏或篡改的关键。防火墙和入侵检测系统(IDS)是维护网络系统安全的两大核心组件。 一、防火墙 定义与功能 防火墙是一种用来加强网络之间访问控制的特殊网络互联设备,它…

鸿蒙Harmony json转对象(1)

案例1 运行代码如下 上图的运行结果如下: 附加1 Json_msg interface 案例2 import {JSON } from kit.ArkTS; export interface commonRes {status: numberreturnJSON: ESObject;time: string } export interface returnRes {uid: stringuserType: number; }Entry Component …

光谱相机在智能冰箱的应用原理与优势

食品新鲜度检测 详细可点击查看汇能感知团队实验报告:高光谱成像技术检测食物新鲜度 检测原理:不同新鲜程度的食品,其化学成分和结构会有所不同,在光谱下的反射、吸收等特性也存在差异。例如新鲜肉类和蔬菜中的水分、蛋白质、叶…

BottomNavigationBar组件的用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了TextField Widget,本章回中将介绍BottomNavigationBar Widget。闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中将介绍一个新的Widget:BottomNavigationBar,它就是我们…