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 有什么用处?能结合实际场景帮助我理解吗.谢谢大家,感激.

12月4日提问
0 个回答

撰写答案

推广链接