Я понимаю, что запросы на агрегирование эластичного поиска занимают много времени по своей природе, особенно в полях с большим количеством элементов. В нашем случае нам нужно вернуть только первые x блоков, отсортированных по алфавиту. Учитывая, что нам нужно вернуть только 10 сегментов, есть ли способ сделать наш запрос быстрее? Есть ли способ заставить Elasticsearch посмотреть только первые 10 групп в каждом шарде и сравнить только эти?
Вот мой запрос ...
{
"size": "600",
"timeout": "60s",
"query": {
"bool": {
"must": [
{
"match_all": {
"boost": 1
}
}
],
"adjust_pure_negative": true,
"boost": 1
}
},
"aggregations": {
"firstname": {
"terms": {
"field": "firstname.keyword",
"size": 10,
"min_doc_count": 1,
"shard_min_doc_count": 0,
"show_term_doc_count_error": false,
"order": {
"_key": "asc"
},
"include": ".*.*",
"exclude": ""
}
}
}
}
Я думаю, что я нахожусь на к чему-то, используя вместо этого составное агрегирование. Вот так ...
"home_address1": {
"composite": {
"size": 10,
"sources": [
{
"home_address1": {
"terms": {
"field": "home_address1.keyword",
"order": "asc"
}
}
}
]
}
}
Тестирование в Postman показывает, что этот запрос выполняется быстрее. Это ожидается? Если так, круто. Как добавить атрибуты include, exclude в составной запрос? Например, иногда я хочу включить только сегменты, значение которых совпадает с "A. *"
Если этот запрос не должен выполняться быстрее, то почему он выглядит так?