【问题标题】:Two elasticsearch queries in one两个弹性搜索查询合二为一
【发布时间】:2020-03-03 02:08:05
【问题描述】:

在我的索引中,我有一个电影列表,其中包含一些信息(标题、年份、评级等)和一个布尔值“已观看”。 当用户点击一个按钮时,我必须显示两件事:

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

截至目前,我有一个使用 match_all 和排序“desc”的查询来获取电影的完整列表,还有另一个使用术语过滤器和排序 desc 的查询来获取最新的“观看”电影。 有没有办法将这两个查询合二为一,这样,对于每一页结果,我都可以获得按日期排序的电影,以及最新观看的电影?

【问题讨论】:

  • 请提供您的疑问。谢谢

标签: elasticsearch


【解决方案1】:

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

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"
      }
    }
  ]
}

【讨论】:

    猜你喜欢
    • 2021-06-20
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    相关资源
    最近更新 更多