在Elasticseach 6中按整个嵌套数组聚合

时间:2018-10-30 16:32:59

标签: elasticsearch aggregation elasticsearch-aggregation

我正在尝试通过categories类型的嵌套字段Product来汇总结果。

我有Product类型的映射:

{
    mappings: {
        product: {
            properties: {
                id: { type: 'keyword' },
                categories: {
                    type: 'nested',
                    properties: {
                        id: { type: 'keyword' },
                        title: { type: 'text' }
                    }
                }
            }
        }
    }
}

我想要实现的是以下产品:

[
    { id: '1', categories: [{ id: '1', title: 'A' }] },
    { 
        id: '2', 
        categories: [
            { id: '1', title: 'A' }, 
            { id: '4', title: 'A-A' },
        ]
    },
    { 
        id: '3', 
        categories: [
            { id: '2', title: 'B' },
            { id: '5', title: 'B-A' }
        ] 
    },
    { 
        id: '4', 
        categories: [
            { id: '2', title: 'B' }, 
            { id: '5', title: 'B-A' }
        ] 
    },      
    { id: '5', categories: [{ id: '3', title: 'C' }] }
]

我需要返回按文档计数排序的categories,但要考虑整个数组的值,而不仅要返回categories中的一项。

[{id: '1', title: 'A'}]: Document count = 2
[{ id: '1', title: 'A' }, { id: '4', title: 'A-A' }]: Document count = 2
[{ id: '2', title: 'B' }, { id: '5', title: 'B-A' }]: Document count = 2
[{ id: '3', title: 'C' }]: Document count = 1

我尝试了以下查询,但它是按类别分组的,因此我需要将类别保持层次结构。

{
    "aggs": {
      "categories": {
        "nested": {
          "path": "categories"
        },
        "aggs": {
          "ids": {
            "terms": {
              "field": "categories.id"
            },
            "aggs": {
              "titles": {
                "terms": {
                  "field": "categories.title"
                }
              }
            }
          }
        }
      }
    }
  }

有什么方法可以按整个categories字段进行汇总?

0 个答案:

没有答案