У меня есть структура документа вроде:
"properties": {
"username": {"type":"keyword, "normalizer":"lc"},
"title": {"type":"text", "analyzer":"title_lc", "search_analyzer":"whitespace"},
"text": {"type":"text",analyzer":"simple"},
"tags": {"type":"keyword","normalizer":"lc"},
"references": {"type":nested", "properties": {
"name": {"type":"text", "analyzer":"name_lc", "search_analyzer":"whitespace"},
"text": {"type":"text", "analyzer":"simple"},
"tags": {"type":"keyword", "normalizer":"lc"},
}
}
И я попробовал агрегацию, которая не вернула вложенных, затем вложенную агрегацию, такую как:
{
"_source": false,
"aggs": {
"main_tag": {
"terms": {"field":"tags"}
},
"sub_tag": {
"nested": {"path": "references"},
"aggs":{
"sub_tag_nest":{
"terms": {"field":"references.tags"}
}
}
}
}
}
Теперь у меня есть несколько тегов ...
{
"took": 4,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1496,
"max_score": 1,
"hits": [
{
"_index": "index",
"_type": "doc",
"_id": "unique_id_1",
"_score": 1
},
…
{
"_index": "index",
"_type": "doc",
"_id": "unique_id_10",
"_score": 1
}
]
},
"aggregations": {
"main_tag": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "",
"doc_count": 1
},
{
"key": "one",
"doc_count": 1
},
{
"key": "Test1",
"doc_count": 1
}
]
},
"sub_tag": {
"doc_count": 25357,
"sub_tag_nest": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "any",
"doc_count": 1575
},
{
"key": "one",
"doc_count": 1
},
{
"key": "test",
"doc_count": 1
}
]
}
}
}
}
Есть ли способ получить это либо как хиты, либо как вообще без хитов?
Масштабируется ли это, если есть 100, 1000, 100 000 тегов?
Могу ли я получить более подробную информацию, кроме количества документов?
Как и в лучшем случае, это список идентификаторов документов для основных тегов, а также идентификатор документа и имя вложенных тегов (я знаю ... маловероятно)
Я думал, что у меня что-то с составной субагрегацией, но кажется, что это не поддерживается:
{"_source": false, "aggs": {
"main_tag_c": {
"composite": {"sources": [{
"main_tag": {"terms": {"field": "tags"} }
}]},
"aggs": {"s_main_tag_c_id": {"terms": {"field": "_id"} } }
},
"sub_tag": {
"nested": {"path": "references"},
"aggs":{
"sub_tag_nest_c": {"composite": {"sources": [{
"sub_tag_nest":{"terms": {"field": "references.tags"} }
}]},
"aggs":{
"s_sub_tag_nest_c": {"composite": {"sources": [{
"sub_tag_nest_id":{"terms": {"field": "_id"} }
}, {
"sub_tag_nest_name":{"terms": {"field": "references.name"} }
}]} }
}
}
} }
Это, однако, говорит мне, что у составного не может быть родительской агрегации. Это очень плохо, потому что я не уверен, как еще я могу получить обе пары идентификаторов и имен в списке под каждым тегом.
Это работает для тегов верхнего уровня, хотя вы видите ограниченный список идентификаторов документов под каждым тегом. Документы также подразумевают, что термины всегда будут ограничены и что при их объединении в составные слова должны быть указаны все ключевые слова в качестве значений сегмента.