Агрегирование Bucket для объекта вместо ключевого слова - PullRequest
0 голосов
/ 01 мая 2018

В моем индексе есть документы, в которых есть вложенный объект locations.

"locations": [
    {
        "name": "California",
        "coordinates": {
            "lat": 36.78,
            "long": -119.42
        }
    }, ...
]

Я написал агрегирование терминов для создания сегментов для имен местоположений, которые появляются в наборе данных:

"aggs": {
    "global": {
        "nested": {
            "path": "locations"
        },
        "aggs":{
            "locations": {
                "terms": { 
                    "field": "locations.name.keyword"
                }
            }
        }
    }
}

То, что я хотел бы сделать, это создать сегменты для объекта полного местоположения, чтобы я мог использовать как имя, так и координаты местоположения в моем коде.

Есть ли что-то вроде агрегирования терминов, которое работает с объектом, а не только с ключевым словом?

Или (поскольку координаты всегда одинаковы для одного и того же местоположения) можно ли вернуть координаты первого местоположения для каждого сегмента вместе со счетчиком?

1 Ответ

0 голосов
/ 02 мая 2018

Хорошо, отличное начало. Теперь, чтобы получить координаты первого местоположения для каждого сегмента вместе с количеством, вы можете сделать это, добавив субагрегацию top_hits, например:

"aggs": {
    "global": {
        "nested": {
            "path": "locations"
        },
        "aggs":{
            "locations": {
                "terms": { 
                    "field": "locations.name.keyword"
                },
                "aggs": {
                   "location": {
                      "top_hits": {
                         "size": 1,
                         "_source": ["locations.coordinates"]
                      }
                   }
                }
            }
        }
    }
}
...