【ElasticSearch】查询优化
一、背景
每周统计接口耗时,发现耗时较长的前几个接口tp5个9都超过了1000ms。
经过分析慢查询的原因是ES查询耗时太长导致的
二、设计方案
1、问题定位
查询功能使用不当导致慢查询
索引设计存在不合理的地方,导致慢查询
2、方案概述
2.1、查询Fetch Source优化
问题
业务查询语句获取的数据集比较大,并且从source中获取了非必须的字段,导致查询较慢。
举例:只需要从es中查询id这一个字段,却把所有字段查询了出来
分析
因为数据集较大,若每个字段都去source中获取所需字段,会导致耗时严重增加,需要避免这种操作,可以大大降低es集群,网络和客户端的压力,提高程序的性能。
优化方法
查语句查询时,将fetchSource设置为false
2.2、查询优化,调整filter过滤顺序
问题
过滤效果不明显的条件放在了前面,导致查询出大量不需要的数据,导致查询变慢
优化方法
把过滤效果明显的条件提前,按照过滤效果把过滤条件排序
2.3、索引时间精度优化
分析
降低时间精度。研究Filter的工作原理可以看出,它每次工作都是遍历整个索引的,所以时间粒度越大,对比越快,搜索时间越短,在不影响功能的情况下,时间精度越低越好,有时甚至牺牲一点精度也值得,当然最好的情况是根本不作时间限制。
优化方法
es重新刷索引,增加冗余的时间字段,精确到天。
带有时间范围的查询使用该字段进行查询
2.4、索引优化,合理使用keyword类型
分析
ES5.x里对数值型字段做TermQuery可能会很慢。
在ES5.x+里,一定要注意数值类型是否需要做范围查询,看似数值,但其实只用于Term或者Terms这类精确匹配的,应该定义为keyword类型。
ES 2.x -> 5.x升级对于数值类型和Term Query有何重大变化?
Lucene6.0引入了重新设计的数值类型的索引结构,不再采用倒排索,而是使用了更适合范围查找的Block K-d Tree。 ES从5.0开始引入这种新结构
Term Query由于通常非常快,从5.1.1开始不再被缓存到Query Cache
有兴趣的可以看一下详细分析:https://elasticsearch.cn/article/446
优化方法
把不做范围查询的数值类型修改为keyword类型
3、reIndex索引
先在管理平台创建新索引模板。模板名:xxx_new,设置索引生成规则
在导数据之前将新索引副本数设为0,这样导数据速度较快,导完数据再改为1 即可
通过脚本执行reIndex操作,需要记录开始时间time
再次执行reIndex上次reIndex期间新写入的增量数据(time减去时差8小时) ,这一步的写入可能需要几分钟
操作动态配置,停止写入ES数据,然后再次reindex这几分钟内写入的增量数据,命令同上(这一次的写入可能就几秒钟了)
删除旧索引,并将新索引的别名设置为旧索引的名称
开启写入ES开关,并且重新导入停止写入ES期间的数据,并恢复各索引副本数为1。
【ElasticSearch】查询优化的更多相关文章
- Elasticsearch查询优化总结
查询优化 1 从提高查询精确度进行优化: 本部分主要针对全文搜索进行探究. 1.1 倒排索引 1.1.1 什么是倒排索引: 一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文 ...
- elasticsearch 查询优化
首先对不必要的字段不做分词也就是不做索引,禁止内存交换 1.shard 一个Shard就是一个Lucene实例,是一个完整的搜索引擎. 分片数过多会导致检索时打开比较多的文件,多台服务器之间通讯成本加 ...
- 白日梦的Elasticsearch实战笔记,ES账号免费借用、32个查询案例、15个聚合案例、7个查询优化技巧。
目录 一.导读 二.福利:账号借用 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! ...
- 白日梦的Elasticsearch实战笔记,32个查询案例、15个聚合案例、7个查询优化技巧。
目录 一.导读 三._search api 搜索api 3.1.什么是query string search? 3.2.什么是query dsl? 3.3.干货!32个查询案例! 四.聚合分析 4.1 ...
- 财务平台亿级数据量毫秒级查询优化之elasticsearch原理解析
财务平台进行分录分表以后,随着数据量的日渐递增,业务人员对账务数据的实时分析响应时间越来越长,体验性慢慢下降,之前我们基于mysql的性能优化做了一遍,可以说基于mysql该做的优化已经基本上都做了, ...
- (转)开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引
Github, Soundcloud, FogCreek, Stackoverflow, Foursquare,等公司通过elasticsearch提供搜索或大规模日志分析可视化等服务.博主近4个月搜 ...
- Elasticsearch(GEO)空间检索查询
Elasticsearch(GEO)空间检索查询python版本 1.Elasticsearch ES的强大就不用多说了,当你安装上插件,搭建好集群,你就拥有了一个搜索系统. 当然,ES的集群优化和查 ...
- 400+节点的 Elasticsearch 集群运维
本文首发于InfoQ https://www.infoq.cn/article/1sm0Mq5LyY_021HGuXer 作者:Anton Hägerstrand 翻译:杨振涛 目录: 数据量 版本 ...
- 开源分布式搜索平台ELK(Elasticsearch+Logstash+Kibana)入门学习资源索引
from: http://www.w3c.com.cn/%E5%BC%80%E6%BA%90%E5%88%86%E5%B8%83%E5%BC%8F%E6%90%9C%E7%B4%A2%E5%B9%B ...
随机推荐
- java判断指定路径文件夹是否存在,若不存在则创建新的文件夹
File file = new File(dirPath); if (!file.exists()) { file.mkdirs(); }
- R3300L Android相关的记录
在寻找高版本Android固件的过程中遇到一个Android6.0的固件, 刷上去之后发现没有Root. 因为原发布者设置了收费的QQ群, 固件开机图上就是QQ群号, 满以为交了钱之后应该能有Root ...
- 异常值检验实战3_NBA球员表现稳定性分析
机器学习_深度学习_入门经典(博主永久免费教学视频系列) https://study.163.com/course/courseMain.htm?courseId=1006390023&sh ...
- PhpStorm2019 代码自动换行
我的版本是2019.1里面没有了Use soft wrap in editor 所以在这里新加上*.php;*.html,并且在前面选上打勾就可以了,其余类似编辑器使用类似的方法
- MySQL数据类型:UNSIGNED注意事项(转)
原文地址:https://www.cnblogs.com/blankqdb/archive/2012/11/03/blank_qdb.html 1. UNSIGNED UNSIGNED属性就是将数字类 ...
- EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器功能简介---视频直播、直播鉴权(如何完美将EasyDSS过渡到新版)
作为RTMP流媒体服务器,接受RTMP推流.进行实时的直播流分发是EasyDSS流媒体服务自身一大核心功能.写本篇博文的一个目的是向大家介绍EasyDSS新版的直播间.匿名直播.和虚拟直播的功能, 另 ...
- Prometheus监控实战day1-监控简介
福利 Prometheus监控实战PDF电子书下载 链接:https://pan.baidu.com/s/1QH4Kvha5g70OhYQdp4YsfQ 提取码:oou5 若你喜欢该资料,请购买该资料 ...
- FLINK-11738
caused by: akka.pattern.asktimeoutexception: ask timed out on flink Caused by: akka.pattern.AskTimeo ...
- 【转】什么是5G?居然有人用漫画把它讲得如此接地气!
最近一系列层出不穷的新闻,似乎都离不开一个关键词——5G.在各大报道中,都提到5G网络是移动无线技术的下一个重要发展. 任正非之前也在采访中说过: “5G,别人两三年也不会追上我们的.” “5G并不是 ...
- 使用事件和 CQRS 重写 CRUD 系统
使用事件和 CQRS 重写 CRUD 系统 https://msdn.microsoft.com/zh-cn/magazine/mt790196.aspx https://github.com/mem ...