这是一个架构
"dynamic": "strict",
"properties" : {
"Id" : {
"type": "integer"
},
"PartNumber" : {
"type" : "keyword",
"normalizer": "alphanumeric"
},
"Menus" : {
"type" : "nested",
"properties" : {
"MenuId" : {
"type" : "integer"
},
"Name" : {
"type" : "keyword",
"normalizer": "alphanumeric"
},
"ParentId" : {
"type" : "integer"
}
}
}
}
}
这是该架构中的一些文档。
{
"Id": 1,
"PartNumber": "1",
"Menus":{
"Id": 1,
"Name": "Root",
"AncestorsIds": [1]
}
}
{
"Id": 2,
"PartNumber": "2",
"Menus":{
"Id": 10,
"Name": "First child",
"AncestorsIds": [10, 1]
}
}
{
"Id": 3,
"PartNumber": "3",
"Menus":{
"Id": 11,
"Name": "Second child",
"AncestorsIds": [11, 1]
}
}
{
"Id": 4,
"PartNumber": "4",
"Menus":{
"Id": 101,
"Name": "Grandchild",
"AncestorsIds": [101, 10, 1]
}
}
这是一个查询,该查询具有一个汇总,用于统计每个菜单ID内或下的结果数。
{
"query":{"bool":{"must":[{"match_all":{}}]}},
"size": 0,
"aggs": {
"Menus": {
"nested": {
"path": "Menus"
},
"aggs": {
"MenusId": {
"terms": {
"field": "Menus.AncestorsIds",
"size": 1000,
"order": {
"_count": "desc"
}
},
"aggs":{"top_hits":{"size": 1, "_source": {"includes": ["Menus.Id", "Menus.Name"]}}}
}
}
}
}
}
密钥为k
的存储桶包含k
中带有Menus.AncestorsIds
的所有文档(一个文档可以出现在多个存储桶中)。
我想在buket k
中选择最热门的文件,而该存储桶中k
也是Menus.Id
的那些文档(因此避免了拉菜单层次结构并从另一个来源合并点击计数数据)