记录一次ES异常慢查询(setExplain)

一.问题背景

有个用户在使用ES发现,通过Kibana查询ES数据很快,但是使用java (Spring data tmpleES)去查询时候同样的语句需要12s才能返回数据。

二.排查路径

1.确认现象 Kibana快,ES查询慢

2.定位问题来自JAVA ES查询。确认api用法是否正常

3.查看配置是否正常

执行时候非常慢,看着查询也可以问题。但是等等查询中有个配置参数setExplain(true)?执行计划吗?

三.setExplain(true)

Elasticsearch 的 explain API 允许你深入了解为什么某个文档与查询匹配,或者为什么某个文档的得分是如何计算的。当你在搜索中设置了 setExplain(true) ,Elasticsearch 将返回每个匹配文档的解释,解释了该文档与查询的匹配程度以及得分的计算方式

  • 我们看看效果:
json 复制代码
{
  "_id": "document_id_123",
  "_score": 5.678,
  "_explanation": {
    "value": 5.678,
    "description": "sum of:",
    "details": [
      {
        "value": 2.34,
        "description": "termFreq=2.34",
        "details": []
      },
      {
        "value": 3.34,
        "description": "weight(field:title in document) [default]",
        "details": []
      }
    ]
  }
}

看到了吗 explanation 中详细解释了 "_score": 5.678 的得分细节。

四.会带来什么影响

通常情况下,开启 explain 是为了调试查询或者理解查询结果的产生过程。但是需要注意的是,开启 explain 可能会增加查询的开销,特别是在大型索引中或者查询结果集很大的情况下。因此,建议在开发和调试阶段使用,而不要在生产环境中持续开启。

所以去除这个参数后:

相关推荐
bobz9656 分钟前
ovs patch port 对比 veth pair
后端
Asthenia041216 分钟前
Java受检异常与非受检异常分析
后端
uhakadotcom30 分钟前
快速开始使用 n8n
后端·面试·github
JavaGuide37 分钟前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
bobz9651 小时前
qemu 网络使用基础
后端
Asthenia04121 小时前
面试攻略:如何应对 Spring 启动流程的层层追问
后端
Asthenia04121 小时前
Spring 启动流程:比喻表达
后端
Asthenia04122 小时前
Spring 启动流程分析-含时序图
后端
ONE_Gua2 小时前
chromium魔改——CDP(Chrome DevTools Protocol)检测01
前端·后端·爬虫
致心2 小时前
记一次debian安装mariadb(带有迁移数据)
后端