一个中的两个Elasticsearch查询

在索引中,我列出了电影列表以及一些信息(标题,年份,等级等),以及一个布尔值“已观看”。 当用户单击按钮时,我必须显示2件事:

  • 按日期排序的电影列表(带有分页)
  • 最新的“已观看”电影

到目前为止,我有一个具有match_all的查询,并为电影的完整列表排序了“ desc”,还有一个带有术语过滤器和排序desc的查询,以获取最新的“已观看”电影。 有没有一种方法可以将这两个查询合而为一,因此,对于结果的每一页,我都可以按所述日期的日期对电影进行排序,还可以获取最近观看的电影?

xiaojiissb 回答:一个中的两个Elasticsearch查询

经过一番搜索,我实际上找到了解决方案... 我正在使用常规查询来获取所有电影,并使用嵌套聚合来获取最新观看的电影。 最终查询如下:

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"
      }
    }
  ]
}
本文链接:https://www.f2er.com/3151256.html

大家都在问