Elasticsearch 按一个字段排序,如果为空则使用另一个字段

rap*_*p13 6 sorting elasticsearch

我有Post模型lastRepliedTimecreatedTime属性。我如何排序此Post通过lastRepliedTime,但是当它的值是空的,我用createdTime的那种价值吗?

例如,我有以下数据:

ID  createdTime          lastRepliedTime
1   2015-05-27 13:48:10  2015-06-04 16:34:43
2   2015-06-09 05:23:38  2015-06-24 00:30:06
3   2015-06-09 17:34:56  NULL
Run Code Online (Sandbox Code Playgroud)

如果我按升序排序,我希望排序结果是这样的:

ID  createdTime          lastRepliedTime
1   2015-05-27 13:48:10  2015-06-04 16:34:43
3   2015-06-09 17:34:56  NULL
2   2015-06-09 05:23:38  2015-06-24 00:30:06
Run Code Online (Sandbox Code Playgroud)

我在这里找到了使用 MySQL 的解决方案。但是有没有办法使用 Elasticsearch 对其进行排序?

小智 1

你尝试过吗?

{
    "sort": [
        { "lastRepliedTime": { "order": "asc" }},
        { "createdTime": { "order": "asc" }}
    ],
    "query" : {
       "match_all" : { }
    }
}
Run Code Online (Sandbox Code Playgroud)