ElasticSearch — ограничить размер вложенной коллекции в результате запроса

Если у меня есть сообщение в блоге с тысячами (или сотнями тысяч) nested комментарии, и я хочу получить только 10 самых популярных сообщений в блоге. Я просто буду использовать size, чтобы управлять тем, сколько сообщений в блогах я хочу получить, но я не уверен, как ограничить размер того, сколько nested комментариев я хочу.

например Это вернет 10 лучших сообщений в блоге с неограниченным количеством комментариев.

GET myblog/_search
{
   "size": 10,
   "query": {
      "match_all": {}
   }
}

Я пытаюсь inner_hits, но это не работает для меня. Когда я использовал, я должен был сделать запрос во вложенных комментариях, я также отключил источник (чтобы избежать получения поста со всеми комментариями), и результат inner_hits даст мне каждый комментарий с каждым постом (избыточный), хотя в некоторых случаях это один и тот же родительский пост. Я также думал о подходе parent-child, но этот означает создание нескольких запросов/запросов.

Знаете ли вы, как ограничить размер вложенной коллекции в запросе?

То, что я ищу, - это создать запрос, который я могу сделать, например, получить 10 лучших сообщений в блогах с 5 лучшими комментариями.


person Jaider    schedule 22.09.2016    source источник


Ответы (1)


Можете ли вы попробовать этот запрос:

{
    "_source": false,
    "fields":["your_fields"],
   "size": 10,
   "query": {
      "match_all": {}
   },
   "inner_hits" : {
        "comments" : {
            "path" : { 
                "comments" : { 
                    "size":5,
                    "query" : {
                        "match_all": {}
                    }
                }
            }
        }
    }
}
person jay    schedule 23.09.2016
comment
inner_hits кажется единственным выходом. Я использую source-exclude вместо fields, чтобы удалить вложенные объекты (например, комментарии) из основного результата. elastic.co/ руководство/en/elasticsearch/client/net-api/5.x/ - person Jaider; 28.10.2016