Вопрос вкратце: почему при выполнении запроса с субагрегацией внутренняя агрегация в некоторых случаях пропускает данные?
Подробный вопрос. У меня есть поисковый запрос с субагрегацией (сегменты в сегментах) следующим образом:
{
"size": 0,
"aggs": {
"outer_docs": {
"terms": {"size": 20, "field": "field_1_to_aggregate_on"},
"aggs": {
"inner_docs": {
"terms": {"size": 10000, "field": "field{
"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"},
]
}
},
...
]
}
}
}
to_aggregate_on"},
"aggs": "things to display here"
}
}
}
}
}
Если я выполняю этот запрос, для некоторых external_docs я получаю не все inner_docs, которые с ним связаны. В приведенном ниже выводе есть три внутренних документа для внешнего документа 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 внутренних_документов на каждый внешний_документ. Что мешает мне получить все данные?
Это моя информация о версии:
{
'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'
}
EDIT: немного покопавшись, я обнаружил, что проблема связана не с субагрегацией, а с самой агрегацией и использованием осколков. Я открыл этот отчет об ошибке для Elastic об этом:
"sum_other_doc_count": 9801
здесь указание. Могу я спросить, сколькоinner_docs
ведер появляется для каждого изouter_docs
? - person Val   schedule 11.01.2019curl -XPUT localhost:9200/_cluster/settings -d '{"persistent": {"search.max_buckets": 30000}}'
? - person Val   schedule 14.01.2019sum_other_doc_count
уменьшение? - person Val   schedule 15.01.2019