首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹性查询的性能

弹性查询的性能
EN

Stack Overflow用户
提问于 2012-12-23 06:27:05
回答 1查看 463关注 0票数 3

此查询在每次执行时都会占用200+ ms:

代码语言:javascript
复制
{
  "filter": {
    "term": {
      "id": "123456",
      "_cache": true
    }
  }
}

但是这个在第一次查询后每次执行只需要2-3毫秒:

代码语言:javascript
复制
{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "term": {
          "id": "123456"
        }
      }
    }
  }
}

请注意,两个查询中的ID值相同。看起来第二个查询使用了第一个查询的缓存结果。但是为什么第一个查询本身不能使用缓存的结果呢?从第一个查询中删除"_cache" : true不会改变任何东西。

当我使用其他ID执行第二个查询时,第一次执行它需要大约40毫秒,之后每次执行2-3毫秒。因此,第二个查询不仅速度更快,而且还缓存结果,并将缓存用于后续调用。

对这一切有什么解释吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-23 11:14:44

第一个请求中的顶级filter元素在Elasticsearch中具有非常特殊的功能。它用于过滤搜索结果,而不影响facet。为了避免干扰方面,此过滤器在收集结果时应用,而不是在搜索期间应用,这导致其性能较慢。使用不带facet的顶级filter意义不大,因为filteredconstant_score查询通常提供更好的性能。如果您对match_all filtered查询的冗长感到困扰,您可以将第二个请求重写为等效的constant_score查询:

代码语言:javascript
复制
{
  "query": {
    "constant_score": {
      "filter": {
        "term": {
          "id": "123456"
        }
      }
    }
  }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14007078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档