2016-09-30 35 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*" 
     } 
    } 
    } 
}