记录一次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 可能会增加查询的开销,特别是在大型索引中或者查询结果集很大的情况下。因此,建议在开发和调试阶段使用,而不要在生产环境中持续开启。

所以去除这个参数后:

相关推荐
IT_陈寒7 分钟前
Java的Stream.peek()千万别乱用,血泪教训
前端·人工智能·后端
小江的记录本20 分钟前
【MySQL】MySQL日志体系:redo log/undo log/binlog 三者区别、两阶段提交、如何保证数据一致性
java·数据库·后端·python·sql·mysql·面试
Jul1en_1 小时前
【Spring Cloud】Spring Cloud Config详解
后端·spring·spring cloud
Wy_编程1 小时前
go语言面向对象和异常处理
开发语言·后端·golang
易安说AI8 小时前
Codex 直接住进 JetBrains IDE 里:AI Agent 正在接管熟悉的开发入口
后端
子兮曰9 小时前
Node.js v26.1.0 深度解读:FFI、后量子密码与调试器的进化
前端·后端·node.js
Wy_编程10 小时前
go语言中的结构体
开发语言·后端·golang
独自归家的兔12 小时前
OCPP 1.6 协议详解:GetLocalListVersion 获取本地列表版本指令
java·后端·物联网·spring·ocpp1.6
无人不xiao14 小时前
springBoot 实现 接口进度条
java·spring boot·后端
IT_陈寒14 小时前
Redis缓存击穿把我坑惨了,原来这样解决才靠谱
前端·人工智能·后端