Агрегирование терминов с вложенным подстановочным путем
Учитывая следующий вложенный объект вложенных объектов
{
[...]
"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
}
]
}
}