账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    elasticsearch 过滤桶和query中过滤有什么区别?
    • 2019-12-04 00:00
    • 10
    94
    0

    在 elasticsearch 官方文档中 : https://www.elastic.co/guide/cn/elasticsearch/guide/current/_filter_bucket.html
    有一段代码 :

    GET /cars/transactions/_search
    {
       "size" : 0,
       "query":{
          "match": {
             "make": "ford"
          }
       },
       "aggs":{
          "recent_sales": {
             "filter": { 
                "range": {
                   "sold": {
                      "from": "now-1M"
                   }
                }
             },
             "aggs": {
                "average_price":{
                   "avg": {
                      "field": "price" 
                   }
                }
             }
          }
       }
    }

    然后官网介绍是: "但是如果我们只想对聚合结果过滤怎么办?假设我们正在为汽车经销商创建一个搜索页面, 我们希望显示用户搜索的结果,但是我们同时也想在页面上提供更丰富的信息,包括(与搜索匹配的)上个月度汽车的平均售价。

    这里我们无法简单的做范围限定,因为有两个不同的条件。搜索结果必须是ford,但是聚合结果必须满足fordANDsold > now - 1M

    为了解决这个问题,我们可以用一种特殊的桶,叫做filter(注:过滤桶)"

    这段话说的我不太理解, 首先, 在 aggs 中的 filter 完全可以写到 query 中的呀, 并不是一定要写到 aggs 中, 也可能是因为我对 elasticsearch 的聚合查询并不了解, 请问各位大佬, 如果将 filter 写到 query 中可行吗, filter 写到 query 中, 和 写到 aggs 中有什么区别吗?在我这里看起来, 我认为完全可以在过滤后再进行查询, 那么就在 query 中使用 bool 查询,将 range 查询和 match 查询连接起来就可以了.
    我不知道在 aggs 中使用 filter 有什么用处?能结合实际场景帮助我理解吗.谢谢大家,感激.

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 暴躁的老齐 普通会员 1楼

      在Elasticsearch中,过滤桶和查询都可以用于对数据进行筛选。但是,它们之间存在一些关键的区别。

      1. 过滤桶: 过滤桶是一种用于限制搜索结果数量的策略。通过创建一个过滤桶,你可以限制在该桶中搜索的结果数量。过滤桶是全局的,对所有文档都有效。你可以在创建过滤桶时指定桶的数量和大小。过滤桶可以根据不同的条件(如文档类型、标题、关键词等)进行过滤。

      2. 查询: 查询是在搜索时使用的。通过查询,你可以指定特定的条件,以限制搜索结果的数量。你可以使用Elasticsearch的查询语言(如matchrangequery等)来定义查询条件。查询可以根据不同的条件(如文档类型、标题、关键词等)进行查询。

      总的来说,过滤桶和查询都是用于对数据进行筛选的工具,但它们的作用和使用场景有所不同。过滤桶主要用于限制搜索结果的数量,而查询则用于指定特定的条件以限制搜索结果的数量。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部