我有一些文档,希望能按日期字段进行排序。对于日期等于特定日期(例如今天)和之后所有日期的文档,我希望按升序排序。对于特定日期之前的日期,我希望按降序排序。
这在ElasticSearch中是否可行?如果可以,您能否建议任何相关文献或方法。
日期的类型是"date",格式为"dateOptionalTime"。
谢谢
我有一些文档,希望能按日期字段进行排序。对于日期等于特定日期(例如今天)和之后所有日期的文档,我希望按升序排序。对于特定日期之前的日期,我希望按降序排序。
这在ElasticSearch中是否可行?如果可以,您能否建议任何相关文献或方法。
日期的类型是"date",格式为"dateOptionalTime"。
谢谢
在ElasticSearch中,使用脚本可以实现排序或评分的功能。我更倾向于使用评分脚本,因为根据文档,“基于脚本的得分”会更快。
使用评分脚本,您可以将int/long
类型的日期字段的Unix时间戳与custom_score
查询中的mvel排序脚本结合使用。您可能需要重新索引文档。还需要能够将搜索的时间转换为Unix时间戳以传输到ElasticSearch。
排序脚本将从每个文档的时间戳中减去所请求的时间戳,并生成绝对值。然后按升序排序 - 最小的“距离”最好。
因此,当查找大约一年前的文档时,它应该如下所示:
"query": {
"custom_score" : {
"query" : {
....
},
"params" : {
"req_date_stamp" : 1348438345,
},
"script" : "abs(doc['timestamp'].value - req_date_timestamp)"
}
},
"sort": {
"_score": {
'order': 'asc'
}
}
(对于我JSON中的任何错误表示歉意-我在pyes
中测试了这个想法)
您可能需要调整此内容以获得正确的舍入-例如,您的问题提到匹配天数,因此您可能希望将时间戳生成器舍入到最接近的一天。
有关“完整”信息,您可以查看自定义得分查询文档并转至MVEL脚本的链接。
我的英语很差。
我的解决方案是提高。
我的数据是{"terms_id": [20211011,20211012,20211013,20211014],"sort_value":1} {"terms_id": [20211012,20211013,20211014],"sort_value":2} {"terms_id": [20211013,20211014,20211015],"sort_value":1}
我的查询是{"bool":{"must":[],"should":[{"bool":{"must":[{"terms":{"terms_id":[20211012],"boost":5}}],"must_not":[]}},{"bool":{"must_not":[{"terms":{"terms_id":[20211012]}}]}}],"minimum_should_match":1}}
我的排序是{"_score":{"order":"desc"},"sort_value":{"order":"desc"}}
结果是{"terms_id": [20211012,20211013,20211014],"sort_value":2} {"terms_id": [20211011,20211012,20211013,20211014],"sort_value":1} {"terms_id": [20211013,20211014,20211015],"sort_value":1}