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

标签 sorting elasticsearch

场景: 我的数据有两个日期字段(created_atpublished_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/

相关文章:

java - 集合的奇怪行为 - 排序方法

swing - 同时对两个 JTable 进行排序

ruby - 排序范围值

javascript - 如何在 2d 游戏中对对象进行排序?

elasticsearch - Cakephp 4.0.1 ElasticSearch插件问题

arrays - Perl:强制按数字顺序散列

elasticsearch - 同义词 token 过滤器

elasticsearch - 过滤Elasticsearch cat API

ruby-on-rails - Elasticsearch 同义词-Rails

elasticsearch - kibana 观察者发送 json 对象数组