在索引中,我列出了电影列表以及一些信息(标题,年份,等级等),以及一个布尔值“已观看”。 当用户单击按钮时,我必须显示2件事:
- 按日期排序的电影列表(带有分页)
- 最新的“已观看”电影
到目前为止,我有一个具有match_all的查询,并为电影的完整列表排序了“ desc”,还有一个带有术语过滤器和排序desc的查询,以获取最新的“已观看”电影。 有没有一种方法可以将这两个查询合而为一,因此,对于结果的每一页,我都可以按所述日期的日期对电影进行排序,还可以获取最近观看的电影?
在索引中,我列出了电影列表以及一些信息(标题,年份,等级等),以及一个布尔值“已观看”。 当用户单击按钮时,我必须显示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"
}
}
]
}