Агрегирование терминов с вложенным подстановочным путем

Учитывая следующий вложенный объект вложенных объектов

{
  [...]
  "nested_parent":{
    "nested_child_1":{
      "classifier":"one"
    },
    "nested_child_2":{
      "classifier":"two"
    },
    "nested_child_3":{
      "classifier":"two"
    },
    "nested_child_4":{
      "classifier":"five"
    },
    "nested_child_5":{
      "classifier":"six"
    }
  [...]
}

Я хочу агрегировать в поле подстановочного знака nested_parent.*.classifierвдоль линий

{
  "size": 0,
  "aggs": {
    "termsAgg": {
      "nested": {
        "path": "nested_parent.*"
      },
      "aggs": {
        "termsAgg": {
          "terms": {
            "size": 1000,
            "field": "nested_parent.*.classifier"
          }
        }
      }
    }
  }
}

который, кажется, не работает - возможно, потому что path а также field не определены достаточно четко.

Как я могу объединить вложенные объекты с динамически создаваемыми вложенными отображениями, которые разделяют большинство их свойств, включая classifier на каких терминах я собираюсь агрегировать?

1 ответ

тдлр;

Немного опоздал на вечеринку. Я бы предложил другой подход, так как не вижу возможного решения с использованием подстановочных знаков.

Мое решение будет включать использованиеcopy_toчтобы создать поле, к которому вы сможете получить доступ с помощью агрегации.

Решение

Идея состоит в том, чтобы создать поле, в котором будут храниться значения всех ваших классификаторов. По которым вы можете выполнять агрегацию.

      PUT /54198251/
{
  "mappings": {
    "properties": {
      "classifiers": {
        "type": "keyword"
      },
      "parent": {
        "type": "nested",
        "properties": {
          "child": {
            "type": "nested",
            "properties": {
              "classifier": {
                "type": "keyword",
                "copy_to": "classifiers"
              }
            }
          },
          "child2": {
            "type": "nested",
            "properties": {
              "classifier": {
                "type": "keyword",
                "copy_to": "classifiers"
              }
            }
          }
        }
      }
    }
  }
}

POST /54198251/_doc
{
  "parent": {
    "child": {
      "classifier": "c1"
    },
    "child2": {
      "classifier": "c2"
    }
  }
}

GET /54198251/_search
{
  "aggs": {
    "classifiers": {
      "terms": {
        "field": "classifiers",
        "size": 10
      }
    }
  }
}

Дам тебе:

        "aggregations": {
    "classifiers": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "c1",
          "doc_count": 1
        },
        {
          "key": "c2",
          "doc_count": 1
        }
      ]
    }
  }
Другие вопросы по тегам