От и размер, как в запросе, не доступны в агрегациях
Вы можете использовать следующие параметры для разбивки на страницы при аггегации: -
- Составное агрегирование : можно объединить несколько источников данных в одно ведро и разрешить разбивку на страницы и сортировку по ним. Он может выполнять линейное разбиение на страницы только с помощью after_key, т.е. вы не можете переходить со страницы 1 на страницу 3. Вы можете получить «n» записей, затем передать возвращенные после ключа и получить следующие «n» записи.
GET index22/_search
{
"size": 0,
"aggs": {
"pagination": {
"composite": {
"size": 1,
"sources": [
{
"source_list": {
"terms": {
"field": "sources.keyword"
}
}
}
]
}
}
}
}
Результат:
"aggregations" : {
"pagination" : {
"after_key" : {
"source_list" : "a" --> used to fetch next records linearly
},
"buckets" : [
{
"key" : {
"source_list" : "a"
},
"doc_count" : 1
}
]
}
}
Для получения следующей записи
{
"size": 0,
"aggs": {
"pagination": {
"composite": {
"size": 1,
"after": {"source_list" : "a"},
"sources": [
{
"source_list": {
"terms": {
"field": "sources.keyword"
}
}
}
]
}
}
}
}
Включить раздел : группирует значения поля в число разделов во время запроса и обрабатывает только один раздел в каждом запросе. Термины поля равномерно распределены по разным разделам. Таким образом, вы должны знать количество терминов заранее. Вы можете использовать
кардинальное агрегирование , чтобы получить счет
GET index/_search
{
"size": 0,
"aggs": {
"source_list": {
"terms": {
"field": "sources.keyword",
"include": {
"partition": 1,
"num_partitions": 3
}
}
}
}
}
Агрегация сортировки по группам : сортирует группы по родительским группам. Каждый сегмент может быть отсортирован по его _key, _count или его подгруппам. Это относится только к сегментам, возвращенным из родительской агрегации. Вам нужно будет установить размер термина на 10 000 (максимальное значение) и усечь сегменты в bucket_sort. Вы можете разбивать на страницы, используя from и size, как в запросе. Если у вас есть термины, превышающие 10000, вы не сможете использовать его, поскольку он выбирает только те сегменты, которые возвращены термином.
GET index/_search
{
"size": 0,
"aggs": {
"source_list": {
"terms": {
"field": "sources.keyword",
"size": 10000 --> use large value to get all terms
},
"aggs": {
"my_bucket": {
"bucket_sort": {
"sort": [
{
"_key": {
"order": "asc"
}
}
],
"from": 1,
"size": 1
}
}
}
}
}
}
С точки зрения производительности составное агрегирование - лучший выбор