Elasticsearch 8.X DSL 如何优化更有助于提升检索性能?

news2025/1/22 9:20:16

1、企业级实战 DSL(数据已经脱敏)

ec5e15c3314ca1853e84f5ba52246bfe.png 31024cb25d4bae51d0ab7ae8f2576974.png 1df1534f1e71a42c5fb572871ea76d98.png

2、大家可以看一下,能发现哪些问题?

根据我的实战和咨询经验,我发现如下几个问题。

当然,这是在和球友交流确认问题之后总结出来的。

2.1 问题1:bool 组合嵌套过深。

官方实际是有参数来约束的,indices.query.bool.max_nested_depth——bool 最大支持的嵌套层数是 20,并且过大的嵌套层数会导致“堆栈溢出”异常问题。

那 bool 组合嵌套越深是不是越慢呢?

我拿 228 万+的微博数据(JMeter 模拟100用户并发)作为样例索引数据进行验证。

  • 实验1:嵌套 10 层;执行 5 次,平均耗时:835 ms。

  • 实验2:嵌套 2 层;执行 5 次,平均耗时:674.8 ms。

对比看实验 2 执行查询较实验 1 的查询要快!

其实,初步结论是嵌套越深,执行越慢!

ad6e7626bd7b9cc043561db19268cce0.png 8dbbb60e1cce1627fd8376aa439a6b50.png

2.2 问题2:大量使用 wildcard 查询。

我之前血淋淋的教训告诉大家,非必要不使用 wildcard !

尤其数据量大的场景。

参见:Elasticsearch 警惕使用 wildcard 检索!然后呢?

依然拿 228 万+的微博数据(JMeter 模拟 100 用户并发)作为样例索引数据进行验证。

5ac6ed008683bea3ee298315f2988ab2.png

检索语句如下:

f1335a610a90332f91bc4f484b8d313b.png

使用:match_phrase 短语匹配较使用 wildcard 模糊匹配效率提升:6.34 倍!

3631ee3a9ef3b72f730923670b14a891.png

初步结论:非必要,不使用  wildcard。

2.3 问题3:"track_total_hits": 2147483647 没有必要搞这么大?

认知前提:Elasticsearch 中 max_result_window 这个参数大家比较熟悉,就是允许 from + size 翻页检索命中的最多文档数为:10000 条记录。

那么问题来了,如果命中数据量超过 10000万怎么办?

  • 一方面:我们可以修改:max_result_window 的默认值,但默认值修改要慎之又慎。

  • 另一方面:我们可以在执行检索的时候加上 track_total_hits 这个参数。

36635b8522b0754146657647a15f4df9.png

问题来了?什么场景需要单独设置 track_total_hits 参数?什么时候不需要呢?

  • 场景一:当索引设置层面设置了 index.sort 后,本质上写入的数据已经进行了预排序。如果只对前 N 个结果感兴趣,而不关心总命中数,可以简单地将 track_total_hits 设置为 false。

  • 场景二:针对 filter 过滤检索的场景,用户仅关注是否存在,不关注相关性。可以分为如下两种情况:

51d1495ca2721b35ce4c30bb7e7ea946.png

(1)情况2.1:将 track_total_hits 设置为 false,检索结果将不再返回 hits.total 的具体值。

(2)情况2.2:将 track_total_hits 设置为给定的 N, 那么每个分片待召回 N 个文档后就返回。除此之外的业务场景,建议慎用 track_total_hits:true 的场景。

我们同样对比一下性能。

f11583de3c8c26e18fd7ebdb799056b0.png

初步结论:加上 track_total_hits,检索会变慢,我们要结合业务场景谨慎使用。

2.4 问题4:track_scores 确认是否必要使用!

track_scores 含义如下:When sorting on a field, scores are not computed. By setting track_scores to true, scores will still be computed and tracked.

也就是说这是个和排序相关的参数,如果走排序,就不计算评分。

如果想对排序加上评分处理,需要加这个参数。

2.5 问题5:"_source": {"includes": [ 确认是否必须

其实有更快的建模方式,就是 store 设置 true 对字段单独建模。当然,这涉及到数据建模和写入。

_source 下召回的数据字段越多,肯定会越慢。暂且不说别的,网络传输的角度就可见一斑。

网络传输中,网速一定,但是 _source 字段多,意味着传输的字节数多,必然会越慢。

还是拿微博数据验证一下,

a6d75ca69876dc0c7d2070c90a05e71a.png

初步结论,仅指定一个字段比全部默认字段(10个以上),影响时间要快很多!

2.6 问题6:match,match_phrase, wildcard 都混合使用,考虑分词问题解决。

推荐:字词混合索引方案。

一个线上问题引发的思考——Elasticsearch 8.X 如何实现更精准的检索?

2.7 问题7:建议线上使用复杂DSL,可以使用性能测试验证一下。

文中 JMeter 测试工具使用,推荐视频:

https://t.zsxq.com/0853Q9epD

3、小结

不要小瞧 DSL 的使用,不要堆砌一些不太理解的参数不加验证直接用于实战环境,后面的风险会变得很大。

00e7a71e5db11a059a957fbc4954e157.png

DSL 的调优其实直接影响到检索性能。

大家对文中的 DSL 还有哪些调优建议,欢迎留言交流!

推荐阅读

  1. 全网首发!从 0 到 1 Elasticsearch 8.X 通关视频

  2. 重磅 | 死磕 Elasticsearch 8.X 方法论认知清单(2022年国庆更新版)

  3. 如何系统的学习 Elasticsearch ?

  4. esrally 如何进行简单的自定义性能测试?

  5. Elasticsearch 性能调优指南——推荐实战 DSL

  6. 让Elasticsearch飞起来!——性能优化实践干货

9ebcc51bdcc3edd789c2ed4c58dc2aab.jpeg

更短时间更快习得更多干货!

和全球 1800+ Elastic 爱好者一起精进!

6b1de16a5bba78e9be22e189e5848746.gif

比同事抢先一步学习进阶干货!

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

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

相关文章

动态加载布局的技巧

文章目录动态加载布局的技巧使用限定符使用最小宽度限定符动态加载布局的技巧 使用限定符 在平板上面大多数时候采用的双页的模式,程序会在左侧列表上显示一个包含子项列表,右侧的面版会显示详细的内容的因为平板具有足够大的屏幕.完全能够显示两页的内容.但是在手机上手机只能…

事业编招聘:雄安新区公开选聘专业骨干人才

河北雄安新区公开选聘专业骨干人才公告 根据河北雄安新区建设发展工作需要,决定面向全国机关、企事业单位选聘部分专业骨干人才,现将有关事项公告如下: 一、选聘计划 共选聘20名专业骨干人才。 二、选聘范围 全国机关和企事业单位工作人员。…

Java包装类

为什么有包装类? 在Java中,基本数据类型不是继承自Object,为了在泛型中可以支持基本数据类型,Java给每个基本数据类型都对应了一个包装类。【基本数据类型不符合面向对象思想,基本类型不是对象,从而基本数据…

机器学习中的数学原理——梯度下降法(最速下降法)

好久没更新了,确实是有点懒了,主要是这两天返乡在隔离(借口)。这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言&#xff0…

开放一批PCB资源(二)

这些板卡,都已经停产,现其PCB和原理图对外开放,都是cadence格式。 有需要的加我微信联系。(微信:18633364981) 这是开放的第二批,后续还有。这一批的价格象征性的收费每个 2000元。 这些板卡…

【操作系统基础】系统接口与系统调用

本文参考MOOC哈工大操作系统课程与课件 主要基于Linux 0.11系统展开 ”Author:Mayiming“ 文章目录一、操作系统接口1. 什么是操作系统接口?2. 操作系统接口体现在哪?3. 命令行是怎么执行代码的?4. 图形界面是怎么执行代码的&…

【Pytorch】Anaconda安装Pytorch详解教程(踩坑经验)

文章目录1、查看本机的CUDA版本2、更新NVIDIA驱动程序3、创建并激活Anaconda虚拟环境4、安装Pytorch5、安装过程中的错误6、检验安装结果未来可期1、查看本机的CUDA版本 cmd命令行输入nvidia-smi 2、更新NVIDIA驱动程序 NVIDIA官网:https://www.nvidia.cn/ 根据…

12、Mybatis搭建流程

Mybatis搭建流程 第一步&#xff1a;引入jar包依赖 第二步&#xff1a;搭建mybatis核心配置文件mybatis-config.xml 一般就四个配置 <properties<typeAliases<Environments<mappers里面内容&#xff1a; mybatis核心配置文件的标签顺序 "(properties?,s…

什么是网站权重?网站权重查询方法有哪些?

什么是网站权重&#xff1f;网站权重查询方法有哪些&#xff1f; 什么是网站权重&#xff1f; 网站权重是搜索引擎给网站赋予的权威值。 网站权重不等于网站排名&#xff0c;但是影响网站排名。 网站权重查询的方法&#xff1a; 方法一&#xff1a;用SEO查询工具。 具体操作如下…

进程通信(1) ----- 无名管道和有名管道

文章目录一、实验目的二、实验内容三、实验要求四、实验步骤及操作五、程序源码1. 普通管道 piperw.c2. 无名管道 wrfifo.c3. 有名管道 rdfifo.c一、实验目的 1.了解操作系统中的无名管道和有名管道 2.掌握进程通信中的管道编程模型 二、实验内容 管道是一种进程间通信的方式…

day13_面向对象的三大特征之一(封装)

封装概述 为什么需要封装&#xff1f; 现实生活中&#xff0c;每一个个体与个体之间是有边界的&#xff0c;每一个团体与团体之间是有边界的&#xff0c;而同一个个体、团体内部的信息是互通的&#xff0c;只是对外有所隐瞒。例如&#xff1a;我们使用的电脑&#xff0c;内部…

Java框架篇(来自硅谷的面试题)

目录 一 简单的谈一下SpringMVC的工作流程&#xff1f; 二 说出Spring或者SpringMVC中常用的5个注解&#xff0c;并解释含义 三 简述SpringMVC中如何返回JSON数据&#xff08;北京&#xff09; 四 谈谈你对Spring的理解 五 Spring中常用的设计模式 六 Spring循环…

IDA安装使用

最近学逆向&#xff0c;先备一套工具吧&#xff0c;IDA名声在外&#xff0c;首当其冲&#xff01;&#xff01; 内容主要整理自别的博客&#xff0c; Linux下安装IDA 链接: https://pan.baidu.com/s/1p9elz1a34872LsY1WLJmlA?pwdis2u 这个ida版本为32bit Linux系统准备的&…

Linux生产者消费者与信号量

目录 一.生产者消费者概念 二.模拟实现基于阻塞队列的生产消费模型 2.1概念 2.2构造阻塞队列 三.信号量 3.1原理 3.2信号量函数 3.3信号量模拟互斥功能 一.生产者消费者概念 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。 生产者和消费者彼此之间…

【C语言】十六进制转换为十进制

目录 题目描述 补充知识&#xff1a; 算法分析 优化算法 写在最后 题目描述 输入一个十六进制数字串&#xff0c;将其转换成为对应的整数并输出转换结果&#xff0c;遇到非十六进制数字或字符串结束符&#xff08;\0&#xff09;结束转换。 注意&#xff1a; 输入的字符…

【Java多线程】初识线程及三种创建方式

➤ Java多线程编程【一文全解】 文章目录线程简介进程的创建> 继承 Thread 类> 实现 Runnable 接口> 实现 Callable 接口线程简介 普通的程序中&#xff0c;方法的调用是执行到方法的时候&#xff0c;程序跳转到方法体中进行&#xff0c;是按照顺序进行的&#xff0c;…

说说未来趋势 「元宇宙」是什么?

最近「元宇宙」概念大火&#xff0c;连星爷等各行各业的各路大佬都可以传出消息布局进入这一个领域&#xff0c;那么这是不是意味这IT信息化时代的下一个风口&#xff0c;就是元宇宙呢&#xff1f;按小郭说呀&#xff0c;这目前来看&#xff0c;这个趋势是必然的&#xff0c;就…

Spirng 痛苦源码学习(一)——总起spring(一)

文章目录前言一、总览Spring的bean1&#xff09;bean的过程【先了解具体的生命周期后面弄】2&#xff09;hello spring 简单bean操作二、总览AOP- 1、test coding- 2、- debug- 3、- 总结debug三、总览事务- 1、- test coding- 2、 debugging- 3、 事务失效- 4、事务总结前言 …

cpu设计和实现(流水线暂停)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;数字电路里面流水线的引入&#xff0c;主要是为了提高数据的处理效率。那么&#xff0c;鉴于此&#xff0c;为什么又要对…

ssm宠物商城管理系统源码

在 Internet飞速开展的今天&#xff0c;互联网成为人们快速获取、发布和传 递信息的重要渠道&#xff0c;它在人们学习、工作、生活等各个方面发挥着重要的作用。 因此建立在 Internet应用上的地位显而易见&#xff0c;它已成为政府、企事业单位信息化 建立中的重要组成局部&am…