And*_*rei 3 performance caching elasticsearch
每次执行时,此查询需要200多毫秒:
{
"filter": {
"term": {
"id": "123456",
"_cache": true
}
}
}
Run Code Online (Sandbox Code Playgroud)
但每次在第一次查询后执行时,这个只需要2-3毫秒:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"term": {
"id": "123456"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意两个查询中的相同ID值.看起来第二个查询使用第一个查询的缓存结果.但为什么第一个查询不能使用缓存结果本身呢?"_cache" : true
从第一个查询中删除不会改变任何内容.
当我用其他ID执行第二个查询时,第一次执行它需要大约40毫秒,之后每次需要2-3毫秒.因此,第二个查询不仅工作得更快,而且还缓存结果并将缓存用于后续调用.
所有这些都有解释吗?
第filter
一个请求中的顶级元素在Elasticsearch中具有非常特殊的功能.它用于过滤搜索结果而不影响构面.为了避免干扰facet,此过滤器在结果收集期间应用,而不是在搜索期间应用,这会导致其性能降低.采用顶级filter
无需方面做很少的意义,因为filtered
与constant_score
查询通常提供更好的性能.如果filtered
查询的详细程度match_all
困扰您,您可以将第二个请求重写为等效constant_score
查询:
{
"query": {
"constant_score": {
"filter": {
"term": {
"id": "123456"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
398 次 |
最近记录: |