假设我有以下内容:
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
排序,然后按名称排序。
这可能吗?
由于
答案 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"
}
}
]