Эластичный поисковый запрос для возврата в топ-3 каждой категории - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу написать эластичный запрос, в котором он должен вернуть первые 3 книги 2 авторов, скажем Сидни Шелдона и Джона Грешама.

Документ содержит поля id, title, author, no_copies_sold, release_Date ...

Я хочу выполнить это в одном запросе вместо того, чтобы каждый раз запрашивать 2 раза Сидни Шелдона и Джона Грешама.

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 04 ноября 2019

Первый фильтр по автору для таргетинга только на те документы, которые вы хотите. После агрегирования по автору, затем возьмите верхние 3 no_copies_sold (= top_book) и попросите название (добавьте другие поля, если вам нужно в запросе).

{
  "size": 0,
  "query": {
    "terms": {
      "author": [
        "Sidney Sheldon",
        "John Gresham"
      ]
    }
  },
  "aggs": {
    "author_agg": {
      "terms": {
        "field": "author"
      },
      "aggs": {
        "hits": {
          "top_hits": {
            "sort": [
              {
                "no_copies_sold": {
                  "order": "desc"
                }
              }
            ],
            "_source": [
              "title"
            ],
            "size": 3
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...