弹性搜索 - 根据过滤器/匹配返回唯一值

时间:2016-02-22 17:54:45

标签: elasticsearch

PUT items/1
{ "language" : 10,
  "country" : "US" }

PUT items/2
{ "language" : 11,
  "country" : "UK" }

PUT items/3
{ "language" : 10,
  "country" : "US" }

PUT items/4
{ "language" : 12,
  "country" : "US" }

如何编写返回唯一语言的搜索查询,即10, 12,其国家/地区为US

要获取所有唯一语言的列表10,11,12,可以使用术语聚合。但是,我无法弄清楚如何将国家过滤器纳入其中。

1 个答案:

答案 0 :(得分:2)

基于用例,实现此目的的一种方法是使用filter aggregations: 例如:

{
   "size": 0,
   "aggs": {
      "country_us": {
         "filter": {
            "term": {
               "country": "us"
            }
         },
         "aggs": {
            "language": {
               "terms": {
                  "field": "language",
                  "size": 0
               }
            }
         }
      }
   }
}