面试题答案
一键面试实现思路
- 理解日期数学格式:Elasticsearch的日期数学格式允许使用相对时间表示,如
now
表示当前时间,now-24h
表示过去24小时。 - 处理时区问题:Elasticsearch存储日期时会自动转换为UTC时间。查询时,我们可以直接使用日期数学格式基于UTC时间进行查询,无需考虑具体时区转换,因为存储和查询都是基于UTC,只要索引中的日期字段正确配置为日期类型,Elasticsearch会自动处理时区相关的转换。
关键配置
- 索引配置:确保日期字段的映射类型为
date
,例如:
{
"mappings": {
"properties": {
"creation_date": {
"type": "date"
}
}
}
}
- 查询配置:在查询语句中,使用
range
查询,并结合日期数学格式。
查询语句
假设日期字段名为creation_date
:
{
"query": {
"range": {
"creation_date": {
"gte": "now-24h",
"lt": "now"
}
}
}
}
此查询语句会在所有时区的索引中,查询过去24小时内(基于UTC时间)创建的文档。因为Elasticsearch内部使用UTC存储日期,所以无需额外处理时区转换。