在我的弹性搜索索引中有以下类型的条目。
{
"_index": "employees",
"_type": "employee",
"_id": "10000",
"_score": 1.3640093,
"_source": {
"itms": {
"depc": [
"IT",
"MGT",
"FIN"
],
"dep": [
{
"depn": "Information Technology",
"depc": "IT"
},
{
"depn": "Management",
"depc": "MGT"
},
{
"depn": "Finance",
"depc": "FIN"
},
{
"depn": "Finance",
"depc": "FIN"
}
]
}
}
}
现在我试图获得唯一的部门列表,包括部门代码(depc)和部门名称(depn)。
我正在尝试跟随,但它没有给出我预期的结果。
{
"size": 0,
"query": {},
"aggs": {
"departments": {
"terms": {
"field": "itms.dep.depc",
"size": 10000,
"order": {
"_term": "asc"
}
},
"aggs": {
"department": {
"terms": {
"field": "itms.dep.depn",
"size": 10
}
}
}
}
}
}
任何建议都表示赞赏。
谢谢你
答案 0 :(得分:1)
从您的agg查询中,itms.dep
的映射类型似乎是对象而不是nested
Lucene没有内部对象的概念,所以Elasticsearch会变平 将对象层次结构转换为字段名称和值的简单列表。
因此,您的文档已内部转换为:
{
"depc" : ["IT","MGT","FIN"],
"dep.depc" : [ "IT","MGT","FIN"],
"dep.depn" : [ "Information Technology", "Management", "Finance" ]
}
即。您已失去depc
和depn
解决此问题:
您现有的agg查询的结构对我来说似乎不错,但您必须将其转换为映射更新后的嵌套聚合