ElasticSearch在top_hits中使用存储桶键值

时间:2019-12-18 13:48:22

标签: elasticsearch elasticsearch-aggregation

这是一个架构

    "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]
    }
}
  • 菜单1或菜单4下的文件。
  • 菜单10中或菜单2下的文件。
  • 菜单11中或菜单1下的文件。
  • 在菜单101中或之下的是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的那些文档(因此避免了拉菜单层次结构并从另一个来源合并点击计数数据)

0 个答案:

没有答案