Ситуация:
Я новичок в Elasticsearch и не могу понять, как использовать агрегаты и получить то, что мне нужно.
У меня есть документысо следующей структурой:
{
...
"authors" : [
{
"name" : "Bob",
"@type" : "Person"
}
],
"resort": "Politics",
...
}
Я хочу использовать агрегацию, чтобы получить количество документов для каждого автора.Поскольку для некоторых документов может быть несколько авторов, эти документы должны учитываться для каждого автора индивидуально.
Что я пробовал:
Поскольку terms
агрегация работала с полем resort
Я пытался использовать его с полем authors
или name
внутри, но всегда не получал никаких блоков.Для этого я использовал следующий запрос curl
:
curl -X POST 'localhost:9200/news/_doc/_search?pretty' -H 'Content-Type: application/json' -d'
{
"_source": false,
"aggs": {
"author_agg": { "terms": {"field": "authors.keyword" } }
}
}'
Я пришел к выводу, что агрегация terms
не работает с полями, содержащимися в списке.
ДалееЯ думал об агрегации nested
, но в документации сказано, что это агрегация с одним сегментом
, так что я не ищу.Поскольку у меня закончились идеи, я попробовал это, но получал ошибку
"type" : "aggregation_execution_exception",
"reason" : "[nested] nested path [authors] is not nested"
Я нашел этот ответ и попытался использовать его для своих данных.У меня был следующий запрос:
curl -X GET "localhost:9200/news/_search?pretty" -H 'Content-Type: application/json' -d'
{
"size": 0,
"aggs": {
"nest": {
"nested": {
"path": "authors"
},
"aggs": {
"authorname": {
"terms" : {
"field": "name.keyword"
}
}
}
}
}
}'
, который дал мне ошибку
"type" : "aggregation_execution_exception",
"reason" : "[nested] nested path [authors] is not nested"
Я искал, как сделать мой путь вложенным, используя сопоставления, но я не мог найти, каквыполнить это.Я даже не знаю, имеет ли это смысл или нет.
Так как я могу объединить документы в сегменты на основе ключа, который лежит в элементах списка внутри документов?
Возможно, на этот вопрос ответили где-то еще, но тогда я не могу правильно сформулировать свою проблему, так как я все еще смущен всей новой информацией.Заранее благодарю за помощь.