2015-09-09 2 views
1

У меня есть это сопоставление в моей базе данных ES, которая использует использование вложенных объектов.Вложенные объекты и агрегации

Каждый документ является Компанией и имеет список сотрудников, сохраненных как вложенные объекты. Вот отображение:

"company": { 
    "properties": { 
     "company_name": { 
      "type": "string" 
     }, 

     "employee": { 
      "properties": { 
       "name": { 
       "type": "string" 
       }, 
       "city": { 
       "type": "string" 
       } 
      }, 
      "type": "nested" 
     } 
     } 
    } 
    } 
} 

У меня есть эти две компании:

Company A 
    [ 
    Smith, Dallas 
    Mark, New York 
    Smith, Houston 
    ] 

Company B 
    [ 
    Smith, Dallas 
    Peter, New York 
    Mary, Houston 
    ] 

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

Запрос, что мне нужно работать, как предполагается, это одна:

Совокупные по городу для всех сотрудников, имя которых Смит

мне нужно иметь ответ, как это:

City for employee Smith: 
    Dallas: 2 
    Houston: 1 

Помня о том, что сотрудник является списком вложенных объектов и что мне не нужна информация о названии компании.

ответ

2

Попробуйте

{ 
    "size": 0, 
    "aggs": { 
     "my_aggs": { 
     "nested": { 
      "path": "employee" 
     }, 
     "aggs": { 
      "city_for_smith": { 
       "filter": { 
        "term": { 
        "name": "smith" 
        } 
       }, 
       "aggs": { 
        "result": { 
        "terms": { 
         "field": "city" 
        } 
        } 
       } 
      } 
     } 
     } 
    } 
} 

также отображать название компании для каждого города, вы можете вложить еще агрегацию внутри последнего.

{ 
 
    ... 
 
    "aggs": { 
 
    "result": { 
 
     "terms": { 
 
     "field": "city" 
 
     }, 
 
     "aggs": { 
 
     "companyAggs": { 
 
      "reverse_nested": {}, 
 
      "aggs": { 
 
      "in_company": { 
 
       "terms": { 
 
       "field": "company_name" 
 
       } 
 
      } 
 
      } 
 
     } 
 
     } 
 
    } 
 
    } 
 
}

+0

Спасибо Райан! Это работает :) Возможно ли в том же запросе показать также название компании, сопоставленное в том же запросе? Город для сотрудников Смит: Даллас: 2 Компания A, B Хьюстон: 1 Компания A – betto86

+0

обновил ответ на этот –

Смежные вопросы