2016-09-30 3 views
0

Я не я использую термины агрегирование, чтобы все не пользователей из каждого городаElasticsearch - получить агрегацию термины для указанных полей

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

Это дает результаты. Но я всегда хочу получить определенные города в результатах агрегирования независимо от того, находятся ли они в топ-10 или нет. Нужно ли использовать агрегат фильтра для каждого города отдельно, чтобы получить его результат?

+0

Возможно, вы просто создали пользовательский сорт с безупречным/безболезненным скриптом, однако я бы пошел на создание двух отдельных агрегатов и слияние их в вашем приложении. –

ответ

0

У вас есть три решения:

A. Вы можете задать фильтр в запросе:

{ 
    "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" 
      } 
     } 
     } 
    } 
    } 
} 

C Вы можете filter values в условиях агрегирования:

{ 
    "aggs": { 
    "cities": { 
     "terms": { 
     "field": "city.name", 
     "include": "city1*", 
     "exclude": "city2*" 
     } 
    } 
    } 
} 
Смежные вопросы