Краткий вопрос : Почему при выполнении запроса с субагрегацией в некоторых случаях внутренняя агрегация пропускает данные?
Подробный вопрос : У меня есть поисковый запрос с подагрегацией (сегменты в сегментах) следующим образом:
{
"size": 0,
"aggs": {
"outer_docs": {
"terms": {"size": 20, "field": "field_1_to_aggregate_on"},
"aggs": {
"inner_docs": {
"terms": {"size": 10000, "field": "field_2_to_aggregate_on"},
"aggs": "things to display here"
}
}
}
}
}
Если я выполню этот запрос, для некоторых external_doc я получу не все внутренние документы, связанные с ним. В приведенном ниже выводе есть три внутренних документа для внешнего документа key_1.
{
"hits": {
"total": 9853,
"max_score": 0.0,
"hits": []
},
"aggregations": {
"outer_docs": {
"doc_count_error_upper_bound": -1, "sum_other_doc_count": 9801,
"buckets": [
{
"key": "key_1", "doc_count": 3,
"inner_docs": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{"key": "1", "doc_count": 1, "some": "data here"},
...
{"key": "3", "doc_count": 1, "some": "data here"},
]
}
},
...
]
}
}
}
Теперь я добавляю запрос, чтобы в одиночку выбрать один external_doc, который в любом случае был бы в первых 20.
"query": {"bool": {"must": [{'term': {'field_1_to_aggregate_on': 'key_1'}}]}}
В этом случае я получаю все inner_docs, которые находятся в выходных данных ниже семи внутренних документов для внешнего ключа key_1.
{
"hits": {
"total": 8,
"max_score": 0.0,
"hits": []
},
"aggregations": {
"outer_docs": {
"doc_count_error_upper_bound": -1, "sum_other_doc_count": 9801,
"buckets": [
{
"key": "key_1", "doc_count": 8,
"inner_docs": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{"key": "1", "doc_count": 1, "some": "data here"},
...
{"key": "7", "doc_count": 2, "some": "data here"},
]
}
},
...
]
}
}
}
Я явно указал, что мне нужно 10 000 inner_docs на external_doc. Что мешает мне получить все данные?
Это информация о моей версии:
{
'build_date': '2018-09-26T13:34:09.098244Z',
'build_flavor': 'default',
'build_hash': '04711c2',
'build_snapshot': False,
'build_type': 'deb',
'lucene_version': '7.4.0',
'minimum_index_compatibility_version': '5.0.0',
'minimum_wire_compatibility_version': '5.6.0',
'number': '6.4.2'
}
РЕДАКТИРОВАТЬ : Покопавшись еще немного, я обнаружил, что проблема связана не с субагрегацией, а с самой агрегацией и использованием сегментов. Я открыл этот отчет об ошибке для Elastic об этом: