我在elasticsearch中有一个复杂的查询。它很慢。我想优化它。 但我不知道如何工作。 如何解释查询,就像Sql解释一样。
我看到elastichsearch _valite / query?解释。它可以解释得分。 但我需要查看详细的执行计划。
{
"post_filter": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"term": {
"base.sysCode": "2801"
}
},
{
"term": {
"base.status": [
12,
0
]
}
}
]
}
}
]
}
},
"fields": [
"base.sysCode",
"base.orderNo"
]
}
结果
{
"valid": true,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"explanations": [
{
"index": "odi_bus_betad_2013",
"valid": true,
"explanation": "ConstantScore(*:*)"
}
]
}
答案 0 :(得分:18)
解释API
计算查询和特定文档的分数说明。无论文档是否与特定查询匹配,都可以提供有用的反馈。
添加"profile": true
GET /_search
{
"profile": true,
"query" : {
"match" : { "user" : "kimchy" }
}
}
个人资料API
提供有关搜索请求中各个组件执行的详细计时信息。它使用户能够深入了解如何在较低级别执行搜索请求,以便用户可以理解为什么某些请求很慢,并采取措施来改进它们。
添加{{1}}
{{1}}
答案 1 :(得分:4)
如果您运行的是最新版本,请将个人资料关键字粘贴到您的查询中:
GET binary/_search
{
"profile": true,
"query": {
...
}
}
}
如果你有X-Pack,你可以使用基于GUI的分析器来查看它的缓慢。可悲的是在开源版本中没有,但它只是上面输出的一个更漂亮的版本 - https://www.elastic.co/guide/en/kibana/5.6/xpack-profiler.html
您可能可以进行30天的试用,或者如果您幸运,也许您已经拥有X-Pack许可证。
答案 2 :(得分:2)
Explain API的用法是here
explain api计算查询和a的分数解释 具体文件。这可以提供有用的反馈是否是文档 匹配或与特定查询不匹配。
答案 3 :(得分:1)
你做的一切都是正确的。您使用explain
运行了查询,Elasticsearch确实在explanations
下显示了详细的执行计划。
然而,这里详细的执行计划显然没有任何细节;这是因为你实际上根本没有运行查询。您只运行了post_filter
(示例中的第一个关键字。)
由于您根本没有指定查询,因此Elasticsearch会匹配索引中的每个文档,并对所有文档应用常量分数。这就是为什么,在explanations
下,您会看到:"explanation": "ConstantScore(*:*)"
由于索引中的每个文档都匹配,因此您指定的post_filter
将应用于每个文档。这本身已经很慢了;更糟糕的是,后期过滤器永远不会被缓存。 (https://www.elastic.co/guide/en/elasticsearch/guide/current/_post_filter.html)因此,explain
永远不会告诉您示例的任何过滤器或缓存信息,即使它可以。
所以,回答你的问题:explain
已经返回了Elasticsearch根据你的具体例子提供的最详细的执行计划。您可以尝试使用常规filter
而不是post_filter
来为Elasticsearch提供构建缓存和提高性能的机会。