Два запроса поиска в одном - PullRequest
0 голосов
/ 06 ноября 2019

В моем индексе у меня есть список фильмов с несколькими сведениями (название, год, рейтинг и т. Д.) И логическим «просмотренным». Когда пользователь нажимает кнопку, мне нужно отобразить 2 вещи:

  • список фильмов, отсортированных по дате (с нумерацией страниц)
  • последний "просмотренный" фильм

На данный момент у меня есть запрос с match_all и сортировкой «desc» для полного списка фильмов, а другой запрос с фильтром терминов и сортировкой desc для получения последнего «просмотренного» фильма. Можно ли объединить эти два запроса в один, чтобы на каждой странице результатов можно было отсортировать фильмы по дате для указанной страницы, а также последний просмотренный фильм?

1 Ответ

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

Я действительно нашел решение после небольшого поиска ... Я использую обычный запрос, чтобы получить все фильмы, и вложенную агрегацию, чтобы получить последний просмотренный фильм. Окончательный запрос выглядит так:

GET movies/_search
{
  "aggs": {
    "watched_movies": {
      "filter": {
        "term": {
          "watched": true
        }
      },
      "aggs": {
        "latest": {
          "top_hits": {
            "size": 1,
            "sort": [{
              "lastWatchAt": {
                "order": "desc"
              }
            }]
          }
        }
      }
    }
  }, 
  "query": {
    "function_score": {
      "boost_mode": "sum",
      "score_mode": "multiply", 
      "query": {
        "match_all": {}
      },
      "functions": [
        {
          "gauss": {
            "releasedYear": {
              "offset": "90d", 
              "origin": "now",
              "scale": "365d"
            }
          }
        }
      ]
    }
  },
  "sort": [
    {
      "releasedYear": {
        "order": "desc"
      }
    }
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...