一.问题背景
有个用户在使用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 可能会增加查询的开销,特别是在大型索引中或者查询结果集很大的情况下。因此,建议在开发和调试阶段使用,而不要在生产环境中持续开启。
所以去除这个参数后:
