我有一个包含日期的字段类型为"text“的映射:
我的映射如下所示:
"title" : "Nebula",
"has_store" : true,
"createdAt" : "Wed Nov 25 2020 05:37:08 GMT+0000 (Coordinated Universal Time)",如何按此日期createdAt排序,以便首先获得最新的项目?
我的查询使用的是ElasticSearch.js
bool: {
must: [{
multi_match: {
query: data.searchTerm,
fields: [
"data.title^2.5",
],
operator: "or",
lenient: "true",
type: 'best_fields',
fuzziness: "AUTO"
}
}],
}
},
from: Number(data.lastKey),
size: Number(data.size)
}有没有一种方法可以使用脚本来做到这一点?如果是这样的话-我如何将日期处理成一个真正的日期对象?
或者,有没有一种方法可以使用我目前使用的字符串格式按日期排序?
发布于 2020-12-03 20:08:59
最好是将字段重新索引为dates,但如果您必须按text中的日期进行排序,那么您可以这样做:
GET your_index/_search
{
"sort": [
{
"_script": {
"type": "number",
"script": {
"lang": "painless",
"source": """
def df = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss 'GMT'Z '('zzzz')'");
return df.parse(doc['createdAt.keyword'].value).getTime();
"""
},
"order": "desc"
}
}
]
}https://stackoverflow.com/questions/65119049
复制相似问题