如何使用Elastic Search按格式化日期排序?

时间:2014-08-14 18:47:53

标签: elasticsearch

假设我有以下内容:

Name      Date
-----   -------------------
Alice   2013-02-10 15:17:00
Alice   2013-02-10 16:19:00
Alice   2013-02-10 17:21:00
Bob     2013-02-10 18:23:00
Alice   2013-02-10 19:25:00

当我为日期排序,然后为名称排序时会发生这种情况。它首先考虑时间。我真正想要的是:

Name      Date
-----   -------------------
Alice   2013-02-10 15:17:00
Alice   2013-02-10 16:19:00
Alice   2013-02-10 17:21:00
Alice   2013-02-10 19:25:00
Bob     2013-02-10 18:23:00

所以,我想首先按%Y-%m-%d排序,然后按名称排序。

这可能吗?

由于

2 个答案:

答案 0 :(得分:0)

您似乎可以使用sort _script:

"sort": {
"_script": {
  "script": "new java.text.SimpleDateFormat('yyyy-MM-dd').format(new Date(doc['date'].value))",
  "type": "string",
  "order": "desc"
},
"name": "asc"

请注意,这是一个安全漏洞。阅读更多http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html

答案 1 :(得分:0)

您可以使用“ .keyword”。

当我们使用下面的代码(其中 add_on 是日期)时,会发生什么! attribute text is analyzed, meaning it is broken up into distinct words when stored, and allows for free-text searches on one or more words in the field

因此,存在与字段关联的“文本”和“关键字”,因此,如果我们需要在查询中使用聚合,则通常需要关键字的字段值。

BEFORE

"_source":{....}
"query" : {...}
"sort": [
{
  "added_on": {
    "order": "desc"
  }
}
]

AFTER
"_source":{....}
"query" : {...}
"sort": [
{
  "added_on.keyword": {
    "order": "desc"
  }
}
]