我将此映射映射到使用嵌套对象的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
]
即,在不同的公司中可以找到相同的名称,而在每个公司中可以找到多个相同的名称。
我需要运行的查询应该是这样的:
在城市中汇总所有名为Smith的员工
我需要一个这样的答案:
City for employee Smith:
Dallas: 2
Houston: 1
请记住,员工是嵌套对象的列表,并且我不需要有关公司名称的任何信息。
最佳答案
试试这个
{
"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"
}
}
}
}
}
}
}
}
关于elasticsearch - 嵌套对象和聚合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32474660/