У меня есть этот запрос, который создает 3 вложенных сегмента:
POST /videos/_search
{
"aggs":{
"filtered_videos":{
"filter":{
"terms":{
"videoId.keyword":[
"randomId1",
"randomId2",
"randomId3",
500 more...
]
}
},
"aggs":{
"filtered_usernames":{
"filter":{
"terms":{
"username.keyword":[
"userExample1",
"userExample2",
"userExample3",
500 more...
]
}
},
"aggs":{
"success_actions":{
"filter":{
"term":{
"success":true
}
},
"aggs":{
"usernames":{
"terms":{
"field":"username.keyword",
"size":10000
},
"aggs":{
"videos":{
"terms":{
"field":"videoId.keyword",
"size":10000,
"missing":"random"
},
"aggs":{
"actions":{
"terms":{
"field":"actionType.keyword",
"size":10000
}
}
}
}
}
}
}
}
}
}
}
}
}
}
Это создает 3 вложенных сегмента, имена пользователей, видео каждого имени пользователя и действия каждого видео каждого имени пользователя, что является именно тем, что я хочу .
Проблема в том, что, по-видимому, по умолчанию предел эластичного поиска составляет 10000 сегментов. Однако для моего случая использования мне нужно 500 блоков имени пользователя, каждый из которых имеет 500 блоков видео, каждый из которых содержит 20 блоков действий. Итак, 500 * 500 * 20 или 5 миллионов ведер. Я знаю, что могу поднять предел, это не мой вопрос.
Мои вопросы:
- Считает лиasticsearch каждое дочернее ведро как ведро, что означает, что я должен был бы поднять лимит до 5 миллионов, или есть другой способ расчета?
- Будет лиasticsearch справиться с таким запросом или он достигнет sh, если я увеличу лимит до 5 миллионов?
- Как я могу оптимизировать свой запрос, чтобы получить те же данные с меньшим количеством сегментов?