假如某个属性是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" : "香港" }}
}
}
}
}}
二者谁的效率高呢?
filter 是判断文档是否满足过滤条件,query 是查看文档和条件匹配度,如果是单纯过滤文档,filter 肯定比query效率高,filter还可以使用查询缓存的