query后聚合和使用filter agg哪个效率高呢?

假如某个属性是address,我想统计杭州和香港两个地方的人数,我有2个选择:
1.查询后聚合

    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "address": "杭州"
                    }
                },
                {
                    "match": {
                        "address": "香港"
                    }
                }    
            ]
        }
    },

    "aggs": {
        "by_address": {
            "terms": {
                "field": "address"
            }
        }
    }
            
    
    
    
    
}

或者直接使用https://www.elastic.co/guide/... 中说的filter agg:

{

    "aggs" : {
    "messages" : {
      "filters" : {
        "filters" : {
          "杭州" :   { "match" : { "address" : "杭州"   }},
          "香港" : { "match" : { "address" : "香港" }}
        }
      }
    }
  }}

二者谁的效率高呢?

阅读 2.6k
1 个回答
新手上路,请多包涵

filter 是判断文档是否满足过滤条件,query 是查看文档和条件匹配度,如果是单纯过滤文档,filter 肯定比query效率高,filter还可以使用查询缓存的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏