Агрегировать по целому вложенному массиву в Elasticseach 6 - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь агрегировать результаты по вложенному полю 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?

...