2016-09-30 22 views
0

我使用的术语汇总得到所有没有用户从各个城市Elasticsearch - 获取方面聚集了指定的字段

{ 
"aggs" : { 
"cities" : { 
    "terms" : { "field" : "city.name" } 
    } 
    } 
} 

这是给结果。但我总是希望得到一些具体城市的聚合结果,而不管它们是否在前十名。我是否需要分别为每个城市使用过滤器聚合来获得其结果?

+0

您可以使用groovy /无痛脚本创建自定义排序,但是我会创建两个独立的聚合并将它们合并到您的应用程序中。 –

回答

0

你有三种解决方法:

答:您可以在查询中指定一个过滤器:

{ 
    "query": { 
    "terms": { 
     "city.name": [ "city1", "city2", "city3" ] 
    } 
    }, 
    "aggs": { 
    "cities": { 
     "terms": { 
     "field": "city.name" 
     } 
    } 
    } 
} 

B.你可以在聚合指定过滤器:

{ 
    "aggs": { 
    "city_filter": { 
     "filter": { 
     "terms": { 
      "city.name": [ 
      "city1", 
      "city2", 
      "city3" 
      ] 
     } 
     }, 
     "aggs": { 
     "cities": { 
      "terms": { 
      "field": "city.name" 
      } 
     } 
     } 
    } 
    } 
} 

Ç你可以用filter values这个术语聚合:

{ 
    "aggs": { 
    "cities": { 
     "terms": { 
     "field": "city.name", 
     "include": "city1*", 
     "exclude": "city2*" 
     } 
    } 
    } 
}