DSL查询文档--查询结果处理

排序

elasticsearch默认是根据相关度算分(_score)来排序,但是也支持自定义方式对搜索结果排序。可以排序字段类型有:keyword类型、数值类型、地理坐标类型、日期类型等。

普通字段排序

keyword、数值、日期类型排序的语法基本一致。

语法

GET /indexName/_search
{"query": {"match_all": {}},"sort": [{"FIELD": "desc"  // 排序字段、排序方式ASC、DESC}]
}

排序条件是一个数组,也就是可以写多个排序条件。按照声明的顺序,当第一个条件相等时,再按照第二个条件排序,以此类推。

示例

需求描述:酒店数据按照用户评价(score)降序排序,评价相同的按照价格(price)升序排序

地理坐标排序

地理坐标排序略有不同。

语法说明

GET /indexName/_search
{"query": {"match_all": {}},"sort": [{"_geo_distance" : {"FIELD" : "纬度,经度", // 文档中geo_point类型的字段名、目标坐标点"order" : "asc", // 排序方式"unit" : "km" // 排序的距离单位}}]
}

这个查询的含义是:

  • 指定一个坐标,作为目标点

  • 计算每一个文档中,指定字段(必须是geo_point类型)的坐标 到目标点的距离是多少

  • 根据距离排序

示例:

需求描述:实现对酒店数据按照到你的位置坐标的距离升序排序

提示:获取你的位置的经纬度的方式:获取鼠标点击经纬度-地图属性-示例中心-JS API 2.0 示例 | 高德地图API

假设我的位置是:31.034661,121.612282,寻找我周围距离最近的酒店。

分页

elasticsearch 默认情况下只返回top10的数据。而如果要查询更多数据就需要修改分页参数了。elasticsearch中通过修改from、size参数来控制要返回的分页结果:

  • from:从第几个文档开始

  • size:总共查询几个文档

类似于mysql中的limit ?, ?

基本的分页

分页的基本语法如下:

GET /hotel/_search
{"query": {"match_all": {}},"from": 0, // 分页开始的位置,默认为0"size": 10, // 期望获取的文档总数"sort": [{"price": "asc"}]
}

深度分页问题

现在,我要查询990~1000的数据,查询逻辑要这么写:

GET /hotel/_search
{"query": {"match_all": {}},"from": 990, // 分页开始的位置,默认为0"size": 10, // 期望获取的文档总数"sort": [{"price": "asc"}]
}

这里是查询990开始的数据,也就是 第990~第1000条 数据。

不过,elasticsearch内部分页时,必须先查询 0~1000条,然后截取其中的990 ~ 1000的这10条:

查询TOP1000,如果es是单点模式,这并无太大影响。

但是elasticsearch将来一定是集群,例如我集群有5个节点,我要查询TOP1000的数据,并不是每个节点查询200条就可以了。

因为节点A的TOP200,在另一个节点可能排到10000名以外了。

因此要想获取整个集群的TOP1000,必须先查询出每个节点的TOP1000,汇总结果后,重新排名,重新截取TOP1000。

那如果我要查询9900~10000的数据呢?是不是要先查询TOP10000呢?那每个节点都要查询10000条?汇总到内存中?

当查询分页深度较大时,汇总数据过多,对内存和CPU会产生非常大的压力,因此elasticsearch会禁止from+ size 超过10000的请求。

针对深度分页,ES提供了两种解决方案,官方文档:

  • search after:分页时需要排序,原理是从上一次的排序值开始,查询下一页数据。官方推荐使用的方式。

  • scroll:原理将排序后的文档id形成快照,保存在内存。官方已经不推荐使用。

分页查询的常见实现方案以及优缺点:

  • from + size

    • 优点:支持随机翻页

    • 缺点:深度分页问题,默认查询上限(from + size)是10000

    • 场景:百度、京东、谷歌、淘宝这样的随机翻页搜索

  • after search

    • 优点:没有查询上限(单次查询的size不超过10000)

    • 缺点:只能向后逐页查询,不支持随机翻页

    • 场景:没有随机翻页需求的搜索,例如手机向下滚动翻页

  • scroll

    • 优点:没有查询上限(单次查询的size不超过10000)

    • 缺点:会有额外内存消耗,并且搜索结果是非实时的

    • 场景:海量数据的获取和迁移。从ES7.1开始不推荐,建议用 after search方案。

高亮

实现高亮

高亮的语法

GET /hotel/_search
{"query": {"match": {"FIELD": "TEXT" // 查询条件,高亮一定要使用全文检索查询}},"highlight": {"fields": { // 指定要高亮的字段"FIELD": {"pre_tags": "<em>",  // 用来标记高亮字段的前置标签"post_tags": "</em>" // 用来标记高亮字段的后置标签}}}
}

注意:

  • 高亮是对关键字高亮,因此搜索条件必须带有关键字,而不能是范围这样的查询。

  • 默认情况下,高亮的字段,必须与搜索指定的字段一致,否则无法高亮

  • 如果要对非搜索字段高亮,则需要添加一个属性:required_field_match=false

总结

查询的DSL是一个大的JSON对象,包含下列属性:

  • query:查询条件

  • from和size:分页条件

  • sort:排序条件

  • highlight:高亮条件

示例:

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

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

相关文章

SSH远程访问与控制

ssh优点 数据传输是加密的&#xff0c;可以防止信息泄露 数据传输是压缩的&#xff0c;可以提高传输速度 作用 sshd 服务使用 SSH 协议可以用来进行远程控制&#xff0c;或在计算机之间传送文件。 ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务&#xff08;文件传…

对C语言的理解

1.计算机语言 就是我们人类与计算机进行交流的媒介。我们可以使用编程语言对计算机下达命令&#xff0c;从而让计算机完成我们所需要的功能。 语言 语法 逻辑 计算机语言有很多种。如&#xff1a;C 、C、Java、Go、JavaScript、Python&#xff0c;Scala等。 2.计算机语言简史…

宠物空气净化器品牌推荐哪个牌子好?五款猫用空气净化器高质量推荐品牌

养宠人家里除了猫粮、猫砂和罐头等必备的日常用品外&#xff0c;宠物空气净化器也是必需的。它可以在我们不方便开窗通风的日子里&#xff0c;有效净化室内空气&#xff0c;并且能够有效减少动物皮屑引起的过敏反应。然而&#xff0c;面对市场上琳琅满目的新款空气净化器、功能…

Webpack模块打包工具

目录 Webpack模块打包工具知识点自测01.Webpack 简介以及体验目标讲解小结 02.Webpack 修改入口和出口目标讲解小结 03.案例-用户登录-长度判断目标讲解小结 04.Webpack 自动生成 html 文件目标讲解小结 05.Webpack-打包 css 代码目标讲解小结 06.优化-提取 css 代码目标讲解小…

浅谈对Maven的理解

一、什么是Maven Maven——是Java社区事实标准的项目管理工具&#xff0c;能帮你从琐碎的手工劳动中解脱出来&#xff0c;帮你规范整个组织的构建系统。不仅如此&#xff0c;它还有依赖管理、自动生成项目站点等特性&#xff0c;已经有无数的开源项目使用它来构建项目并促进团队…

C++ Webserver从零开始:基础知识(三)——Linux服务器程序框架

目录 前言 一.服务器编程基础框架 C/S模型 主要框架 二.I/O模型 阻塞I/O 非阻塞I/O 异步I/O 三.两种高效的事件处理模式 Reactor Proactor 四.模拟Proactor模式 五.半同步/半异步的并发模式 六.有限状态机 七.其他提高服务器性能的方法 池 数据复制 上下文切换…

浅谈缓存最终一致性的解决方案

浅谈缓存最终一致性的解决方案 作者&#xff1a;clareguo&#xff0c;腾讯 CSIG 后台开发工程师 来源&#xff1a;腾讯技术工程open in new window 到底是更新缓存还是删除缓存? 到底是先更新数据库&#xff0c;再删除缓存&#xff0c;还是先删除缓存&#xff0c;再更新数据…

非常非常实用!不能错过,独家原创,9种很少人听过,但却实用的混沌映射!!!以鲸鱼混沌映射为例,使用简便

很多人在改进的时候&#xff0c;想着增加混沌映射&#xff0c;增加初始种群的多样性&#xff0c;可是&#xff0c;大多数论文中常见的映射&#xff0c;都被别人使用了&#xff0c;或者不知道被别人有没有使用&#xff0c; 本文介绍9种很少人知道&#xff0c;但非常实用混沌映射…

线性调频信号的解线调(dechirp,去斜)处理matlab仿真

线性调频信号的解线调 线性调频信号的回波模型参考信号去斜处理去斜处理傅里叶变换得到脉压结果解线调仿真总结 线性调频信号的回波模型 对于线性调频脉冲压缩雷达&#xff0c;其发射信号为&#xff1a; s ( t ) r e c t ( t T ) e x p ( j π μ t 2 ) \begin{equation} s(…

强化学习求解TSP:Qlearning求解旅行商问题(Traveling salesman problem, TSP)

一、Qlearning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于奖励的决策问题。它是一种无模型的学习方法&#xff0c;通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策&#xff0c;该函数表示在给定状态下采取某个动作所获…

等保测评流程是什么样的?测评周期多久?

等保测评流程是什么样的&#xff1f;测评周期多久&#xff1f; 等保测评一般分成五个阶段&#xff0c;定级、备案、测评、整改、监督检查。 1.定级阶段 针对用户的信息系统有等保专家进行定级&#xff0c;一般常见的系统就是三级系统或者是二级系统。在这里有一个小的区分&am…

[ACM算法学习] 诱导排序与 SA-IS算法

学习自诱导排序与SA-IS算法 - riteme.site 为了简化一些操作&#xff0c;定义 # 是字典序最小的字符&#xff0c;其字典序小于字母集里任意字符&#xff0c;并且将其默认作为每个字符串的最后一个字符&#xff0c;即作 S[|S|] SA-IS 算法 SA-IS 算法是基于诱导排序这种思想。…

【二、自动化测试】unittest测试框架简介

你好啊&#xff01;我是程序员山茶&#xff0c;你也可以称我为测试开发Guide。本文首发“unittest” 每个语言都包含有自己的测试框架&#xff0c;python中同样有很多测试框架&#xff0c;具体如下 unittest&#xff1a; unittest是Python自带的单元测试框架&#xff0c;它提供…

Docker安装Elasticsearch8详细步骤

前面讲了Elasticsearch7的安装步骤&#xff0c;今天讲讲Elasticsearch8的安装&#xff0c;大同小异。 1、配置环境变量 .env 文件设置运行 docker-compose.yml 配置文件时使用的环境变量。 确保使用 ELASTIC_PASSWORD 和 KIBANA_PASSWORD 变量为 elastic 和 kibana_system 用…

基于机器学习的高考志愿高校及专业分析系统

本项目在“基于 Python 的高考志愿高校及专业分析系统”基础上补充添加了机器学习算法对高考总问进行预测&#xff1b; 项目采用了网络爬虫技术&#xff0c;从指定的高考信息网站上抓取了各大高校的历年录取分数线数据。 通过精细的数据清洗过程&#xff0c;这些数据被存储于…

云计算任务调度仿真02

前面已经分享过一个仿真项目&#xff0c;但是基于policy gradient方法实现的&#xff0c;考虑到许多人从零到一实现DQN方法有点难度&#xff0c;所以这次分享一个基于DQN实现的仿真项目&#xff0c;非常简单。 这里之所以简单主要得益于它是用pytorch实现的&#xff0c;而pyto…

NLP论文阅读记录 - 2022 W0S | 基于Longformer和Transformer的提取摘要层次表示模型

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 A Hierarchical Representation Model Based on Longformer and …

Unity游戏图形学 Shader结构

shader结构 shader语言 openGL&#xff1a;SLG跨平台 >GLSL&#xff1a;openGL shaderlauguge DX&#xff1a;微软开发&#xff0c;性能很好&#xff0c;但是不能跨平台 >HLSL&#xff1a;high level shader language CG&#xff1a;微软和Nvidia公司联合开发&#xff…

open3d相关操作总结

open3d其实有很多交互式命令&#xff0c;在运行程序打开了open3d渲染的窗口后&#xff0c;鼠标点击窗口&#xff0c;按H就会弹出&#xff0c;交互命令的帮助&#xff0c;如下图所示&#xff1a; 其中比较常用的有&#xff1a; Q &#xff1a;退出当前窗口 H&#xff1a;打印帮…

5 - 异常处理

目录 1. 总览 1.1 Exception 与 Error 1.2 checked unchecked 异常 1&#xff09;使用 try-catch 进行捕获 2&#xff09;使用 throws 关键字抛出 1.3 throw 与 throws 1&#xff09;throw 2&#xff09;throws 3&#xff09;区别 1.4 try-catch-finally 2. try wit…