Найдите 5 лучших документов из каждого уникального ведра - PullRequest
0 голосов
/ 30 апреля 2018

Допустим, у меня есть несколько документов ElasticSearch, например, приведенный ниже пример:

 {
    "Tagname": [
        "Veniam"
    ],
    "Title": [
        "Occaecat do. Eu ut."
    ]
  },
  ...
  ...
  ...
  {
    "Tagname": [
        "Anim"
    ],
    "Title": [
        "Consectetur dolor consectetur eu."
    ]
  },
  ...
  ...
  ...
  {
    "Tagname": [
        "Aliqua"
    ],
    "Title": [
        "Culpa in ut ut. Enim in excepteur eiusmod."
    ]
  }
  ...
  ...
  ...   

Здесь предположим, что Tagname - это имя тега, под которым попадает каждый Title. И Tagname отображается как keyword, так что, когда я агрегирую на Tagname.keyword, я получаю, например, 3 уникальных ведра TagName (Veniam, Anim, Aliqua и т. Д.). В моем случае давайте предположим, что у нас нет фиксированного числа уникальных TagName, и оно может динамически меняться. Таким образом, мы не можем предполагать статический список уникальных TagName в нашем поисковом запросе.

То, чего я хочу достичь сейчас, - это получить 5 лучших значений Title под каждым из этих сегментов. (До сих пор сортировка или упорядочение любого вида, чтобы получить первые 5 не являются существенными, и случайная 5 также будет работать. Однако объяснение для сортировки будет полезным.)

1 Ответ

0 голосов
/ 01 мая 2018

Я предлагаю использовать следующую агрегацию. Я использовал произвольный размер 100, но вы можете заменить его на количество элементов в вашем поле Tagname, чтобы убедиться, что вы получаете один сегмент на значение Tagname. Затем у вас есть вложенная совокупность top_hits, которая вернет вам 5 документов для каждого сегмента.

{
  "size": 0,
  "aggs": {
    "tags": {
      "terms": {
        "field": "Tagname.keyword",
        "size": 100
      },
      "aggs": {
        "latest": {
          "top_hits": {
            "size": 5
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...