场景:
我的数据有两个日期字段(created_at
和 published_on
)。在某些情况下,日期不正确,我需要按两个日期中较小(较早)的日期进行排序。
换句话说,对于每个项目,找出较旧的日期,然后使用它进行排序。
我从文档中看到,您可以按字段“顺序”排序(例如:按名称排序,然后按城市排序),并且我看到一些数字排序选项(最小/最大等)。但我正在努力解决如何实现这一目标。
This post描述了它如何在 PostgreSQL 之类的东西中工作,但我知道 Elastic 是一种完全不同的动物,所以我希望有某种方法可以做到这一点。
谢谢!
最佳答案
您需要从两个字段中提取一个值,然后根据该值进行排序。为此,您需要 script based sorting 。在您的查询 dsl 中,您必须添加排序参数,如下所示:
{
"sort": {
"_script": {
"type": "number",
"script": {
"source": "if(doc['created_at'].value.getMillis() < doc['published_on'].value.getMillis()) { return doc['created_at'].value.getMillis(); } else { return doc['published_on'].value.getMillis(); }",
"lang": "painless"
},
"order": "desc"
}
}
}
关于sorting - 在 Elasticsearch 中如何按两个日期中较小的一个进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54601172/