индексированных документов, как:Добавление дополнительных полей для ElasticSearch агрегацию Условия
{
id: 1,
title: 'Blah',
...
platform: {id: 84, url: 'http://facebook.com', title: 'Facebook'}
...
}
То, что я хочу, это счета и вывода статистики по-платформе. Для подсчета, можно использовать агрегацию термины с platform.id
в качестве поля для подсчета:
aggs: {
platforms: {
terms: {field: 'platform.id'}
}
}
Таким образом, я получаю статистику в качестве нескольких ведер, похожих на {key: 8, doc_count: 162511}
, как и ожидалось.
Теперь, могу ли я как-то добавить к этим ковшим также platform.name
и platform.url
(для получения достаточного результата статистики)? Лучшее, что я пришел с выглядит как:
aggs: {
platforms: {
terms: {field: 'platform.id'},
aggs: {
name: {terms: {field: 'platform.name'}},
url: {terms: {field: 'platform.url'}}
}
}
}
Что, на самом деле, работает, и возвращает довольно сложную структуру в каждом ведре:
{key: 7,
doc_count: 528568,
url:
{doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [{key: "http://facebook.com", doc_count: 528568}]},
name:
{doc_count_error_upper_bound: 0,
sum_other_doc_count: 0,
buckets: [{key: "Facebook", doc_count: 528568}]}},
Конечно, название и URL платформы может быть извлеченный из этой структуры (например, bucket.url.buckets.first.key
), но есть ли более чистый и простой способ выполнить эту задачу?
вы нашли какое-либо решение вашей проблемы? Я столкнулся с тем же правом прямо сейчас :( –
Я разместил его ниже как мой собственный «принятый» ответ :) – zverok