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

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

например, это вернет топ-10 постов в блоге с неограниченным количеством комментариев

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

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

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

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

1 ответ

Решение

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

{
    "_source": false,
    "fields":["your_fields"],
   "size": 10,
   "query": {
      "match_all": {}
   },
   "inner_hits" : {
        "comments" : {
            "path" : { 
                "comments" : { 
                    "size":5,
                    "query" : {
                        "match_all": {}
                    }
                }
            }
        }
    }
}
Другие вопросы по тегам