Если я правильно понимаю ваш вопрос, вы хотите, чтобы агрегирование терминов не зависело от поискового запроса.
Для него можно использовать глобальное агрегирование .
Определяет одну корзину всех документов в контексте выполнения поиска. Этот контекст определяется индексами и типами документов, которые вы ищете, но не зависит от самого поискового запроса
Пример
Отображение:
{
"index50" : {
"mappings" : {
"properties" : {
"name" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
}
}
}
}
Данные:
"hits" : [
{
"_index" : "index50",
"_type" : "_doc",
"_id" : "v8MR3XABAqtoal9HOsoo",
"_score" : 1.0,
"_source" : {
"name" : "john"
}
},
{
"_index" : "index50",
"_type" : "_doc",
"_id" : "wMMR3XABAqtoal9HU8rs",
"_score" : 1.0,
"_source" : {
"name" : "doe"
}
}
]
Запрос:
{
"query": {
"match": {
"name": "john"
}
},
"aggs": {
"name_global_faucet": {
"global": {},--> will return terms from all documents
"aggs": {
"first_name": {
"terms": {
"field": "name.keyword",
"size": 10
}
}
}
},
"name_faucet": {
"terms": {--> will return terms from documents returned in query
"field": "name.keyword",
"size": 10
}
}
}
}
Результат:
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.6931472,
"hits" : [
{
"_index" : "index50",
"_type" : "_doc",
"_id" : "v8MR3XABAqtoal9HOsoo",
"_score" : 0.6931472,
"_source" : {
"name" : "john"
}
}
]
},
"aggregations" : {
"name_faucet" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "john",
"doc_count" : 1
}
]
},
"name_global_faucet" : {
"doc_count" : 2,
"first_name" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"buckets" : [
{
"key" : "doe",
"doc_count" : 1
},
{
"key" : "john",
"doc_count" : 1
}
]
}
}
}
}