У меня есть большое количество документов (миллионов), которые имеют массивы значений ключевых слов:
Сопоставление:
{
"my_index": {
"mappings": {
"properties": {
"id": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"keywords": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
Примеры документов:
{
"id": "abc",
"keywords": ["cat", "dog", "person"]
}
{
"id": "def",
"keywords": ["tree", "person"]
}
{
"id": "ghi",
"keywords": ["person", "human"]
}
...
Давайте скажем, я получаю верхние 3 сегмента ключевых слов, а остальные отображаются в «другом» следующим образом:
/GET /my_index/_search
{
"size": 0,
"track_total_hits": true,
"aggs": {
"keyword_buckets": {
"terms": {
"field": "keywords.keyword",
"size": 3
}
}
}
}
Есть 2 232 121 документа, но я получаю следующие сегменты:
{
"took": 256,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 2232121,
"relation": "eq"
},
"max_score": null,
"hits": []
},
"aggregations": {
"keyword_buckets": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 6250132,
"buckets": [
{
"key": "person",
"doc_count": 326552
},
{
"key": "human",
"doc_count": 326529
},
{
"key": "photograph",
"doc_count": 222190
}
]
}
}
}
Я получаю 6 250 132 документов в «другом» ведре. Я ожидаю, что сумма лучших 3 и «другого» будет 2,232,121. В SQL терминах это будет DISTINCT
количество документов для всех сегментов.
Какой запрос мне нужно сделать, чтобы достичь этого?