В настоящее время я агрегирую коллекцию с помощью многоуровневого вложенного поля и вычисляю некоторые показатели субагрегации из этой коллекции, и это работает с использованием функции обратной вложенности elasticsearch, как описано в разделе «Подагрегирование многоуровневой вложенной составной агрегации».< /p>
Моя текущая задача — найти способ сортировки агрегатов по одной из вычисляемых метрик. Например, учитывая следующий документ и мой текущий поисковый вызов, я хотел бы отсортировать все агрегаты по сумме кликов.
Я пробовал использовать Bucket_sort внутри внутренних агрегатов. на уровне back_to_parent, но получил следующее исключение Java.
class org.elasticsearch.search.aggregations.bucket.nested.InternalReverseNested cannot be cast to class org.elasticsearch.search.aggregations.InternalMultiBucketAggregation
(org.elasticsearch.search.aggregations.bucket.nested.InternalReverseNested and org.elasticsearch.search.aggregations.InternalMultiBucketAggregation are in unnamed module of loader 'app')
{
id: '32ead132eq13w21',
statistics: {
clicks: 123,
views: 456
},
categories: [{ //nested type
name: 'color',
tags: [{ //nested type
slug: 'blue'
},{
slug: 'red'
}]
}]
}
GET /acounts-123321/_search
{
size: 0,
aggs: {
categories_parent: {
nested: {
path: 'categories.tags'
},
aggs: {
filtered: {
filter: {
term: { 'categories.tags.category': 'color' }
},
aggs: {
by_slug: {
terms: {
field: 'categories.tags.slug',
size: perPage
},
aggs: {
back_to_parent: {
reverse_nested: {},
aggs: {
clicks: {
sum: {
field: 'statistics.clicks'
}
},
custom_metric: {
scripted_metric: {
init_script: 'state.accounts = []',
map_script: 'state.accounts.add(new HashMap(params["_source"]))',
combine_script: 'double result = 0;
for (acc in state.accounts) {
result += ( acc.statistics.clicks + acc.statistics.impressions);
}
return result;',
reduce_script: 'double sum = 0;
for (state in states) {
sum += state;
}
return sum;'
}
},
by_tag_sort: {
bucket_sort: {
sort: [{ 'clicks.value': { order: 'desc' } }]
}
}
}
}
}
}
}
}
}
Обновление:
Также было бы неплохо понять, как можно сортировать сегменты по специальная метрика, рассчитываемая с помощью скриптовой_метрики. Я обновил вызов поиска выше, добавив образец custom_metric, по которому я хочу разрешить сортировку.
Я вижу, что использование Bucket_sort напрямую не работает с стандартный массив сортировки, который мы используем для конкретных полей. Итак, следующее, похоже, не сортирует вещи. Это также не будет работать для сценария сортировки, поскольку [bucket_sort] поддерживает только сортировку по полям.
by_tag_sort: {
bucket_sort: {
sort: [{ 'custom_metric.value': { order: 'desc' } }]
}
}
Подробнее здесь: https://stackoverflow.com/questions/662 ... ggregation
Сортировка обратной вложенности обратно в родительскую агрегацию ⇐ Elasticsearch aggregation
-
Anonymous
1735904573
Anonymous
В настоящее время я агрегирую коллекцию с помощью многоуровневого вложенного поля и вычисляю некоторые показатели субагрегации из этой коллекции, и это работает с использованием функции обратной вложенности elasticsearch, как описано в разделе «Подагрегирование многоуровневой вложенной составной агрегации».< /p>
Моя текущая задача — найти способ сортировки агрегатов по одной из вычисляемых метрик. Например, учитывая следующий документ и мой текущий поисковый вызов, я хотел бы отсортировать все агрегаты по сумме кликов.
Я пробовал использовать Bucket_sort внутри внутренних агрегатов. на уровне back_to_parent, но получил следующее исключение Java.
class org.elasticsearch.search.aggregations.bucket.nested.InternalReverseNested cannot be cast to class org.elasticsearch.search.aggregations.InternalMultiBucketAggregation
(org.elasticsearch.search.aggregations.bucket.nested.InternalReverseNested and org.elasticsearch.search.aggregations.InternalMultiBucketAggregation are in unnamed module of loader 'app')
{
id: '32ead132eq13w21',
statistics: {
clicks: 123,
views: 456
},
categories: [{ //nested type
name: 'color',
tags: [{ //nested type
slug: 'blue'
},{
slug: 'red'
}]
}]
}
GET /acounts-123321/_search
{
size: 0,
aggs: {
categories_parent: {
nested: {
path: 'categories.tags'
},
aggs: {
filtered: {
filter: {
term: { 'categories.tags.category': 'color' }
},
aggs: {
by_slug: {
terms: {
field: 'categories.tags.slug',
size: perPage
},
aggs: {
back_to_parent: {
reverse_nested: {},
aggs: {
clicks: {
sum: {
field: 'statistics.clicks'
}
},
custom_metric: {
scripted_metric: {
init_script: 'state.accounts = []',
map_script: 'state.accounts.add(new HashMap(params["_source"]))',
combine_script: 'double result = 0;
for (acc in state.accounts) {
result += ( acc.statistics.clicks + acc.statistics.impressions);
}
return result;',
reduce_script: 'double sum = 0;
for (state in states) {
sum += state;
}
return sum;'
}
},
by_tag_sort: {
bucket_sort: {
sort: [{ 'clicks.value': { order: 'desc' } }]
}
}
}
}
}
}
}
}
}
Обновление:
Также было бы неплохо понять, как можно сортировать сегменты по специальная метрика, рассчитываемая с помощью скриптовой_метрики. Я обновил вызов поиска выше, добавив образец custom_metric, по которому я хочу разрешить сортировку.
Я вижу, что использование Bucket_sort напрямую не работает с стандартный массив сортировки, который мы используем для конкретных полей. Итак, следующее, похоже, не сортирует вещи. Это также не будет работать для сценария сортировки, поскольку [bucket_sort] поддерживает только сортировку по полям.
by_tag_sort: {
bucket_sort: {
sort: [{ 'custom_metric.value': { order: 'desc' } }]
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/66294446/sorting-a-reverse-nested-back-to-parent-aggregation[/url]
Ответить
1 сообщение
• Страница 1 из 1
Вернуться в «Elasticsearch aggregation»
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия