在索引中,我列出了电影列表,其中包含一些信息(标题,年份,等级等),以及一个 bool(boolean) 值“已观看”。
当用户单击按钮时,我必须显示2件事:
到目前为止,我有一个具有match_all的查询,并按“desc”排序以获取电影的完整列表,还有一个具有术语过滤器和排序desc的查询,以获取最新的“已观看”电影。
有没有一种方法可以将这两个查询合而为一,这样,对于结果的每一页,我都可以按所述日期的日期对电影以及最近观看的电影进行排序?
最佳答案
经过一番搜索,我实际上找到了解决方案...
我正在使用常规查询来获取所有电影,并使用嵌套聚合来获取最新观看的电影。
最终查询如下所示:
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"
}
}
]
}
关于elasticsearch - 一个中的两个Elasticsearch查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58732721/