记一次ES查询调优(ES5.x)

事由

应用部门反应搜索中间件,响应速度偶然过慢,查询搜索日志发现不定时会有超过2s的响应。

排查

分析DSL,看下DSL是否使用不当,一番检查后没有发现DSL异常。使用Search Profiler分析DSL,结果如下图:
在这里插入图片描述
status=0 这个条件竟然使用了10.5ms 并且status类型是int 使用term查询,结果超乎想象。

分析问题

为什么number类型的竟然需要查询那么久,生产环境使用的ES是5.6.5,lucene是6.6.1,一番搜索后发现lucene6.0以上版本引入了重新设计的数值类型的索引结构,不再采用倒排索,而是使用了更适合范围查找的Block K-d Tree, ES从5.0开始引入这种新结构。
Term Query由于通常非常快,从5.1.1开始不再被缓存到Query Cache
感兴趣的可以看下这篇文章numb3rs

确定解决方案

因status只是用来标记状态的字段,并不会用作范围查找,而且status的值也就只有那么几种,比较适合使用keyword来存储。

优化

把status改为keyword结构后,搜索效率有一个质的飞跃
在这里插入图片描述
建议,不做范围查找的字段都设置为keyword类型。

参考

https://elasticsearch.cn/article/446

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值