Как я могу получить теги моего эластичного поискового документа со ссылкой на их документ? - PullRequest
0 голосов
/ 20 марта 2019

У меня есть структура документа вроде:

"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"} }
     }]} }
   }
 }
} }

Это, однако, говорит мне, что у составного не может быть родительской агрегации. Это очень плохо, потому что я не уверен, как еще я могу получить обе пары идентификаторов и имен в списке под каждым тегом.

Это работает для тегов верхнего уровня, хотя вы видите ограниченный список идентификаторов документов под каждым тегом. Документы также подразумевают, что термины всегда будут ограничены и что при их объединении в составные слова должны быть указаны все ключевые слова в качестве значений сегмента.

...