在 Elasticsearch 中如何按两个日期中较小的一个进行排序?

2024-01-05

设想: 我的数据有两个日期字段(created_at and published_on)。在某些情况下,日期不正确,我需要按两个日期中较小的(较旧的)日期进行排序。

换句话说,对于每个项目,找出较旧的日期,然后使用它进行排序。

我从文档中看到,您可以按字段“顺序”排序(例如:按名称排序,然后按城市排序),并且我看到一些数字排序选项(最小/最大等)。但我正在努力解决如何实现这一目标。

这个帖子 https://stackoverflow.com/questions/37994752/rails-order-sort-dates-based-on-two-different-dates描述了它在 PostgreSQL 之类的东西中是如何工作的,但我知道 Elastic 是一个完全不同的动物,所以我希望有某种方法可以做到这一点。

Thanks!


您需要从两个字段中提取一个值,然后根据该值进行排序。为此你需要基于脚本的排序 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html#_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"
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Elasticsearch 中如何按两个日期中较小的一个进行排序? 的相关文章

随机推荐