面试题答案
一键面试时间单位应用场景
- 查询特定时间范围内的数据:在日志分析、监控数据等场景中,经常需要获取某段时间内产生的数据。例如,查找过去一小时内系统产生的错误日志,以定位系统故障时间段。
- 数据生命周期管理:设定数据在Elasticsearch中的保留时间。比如,规定业务数据只保留30天,过期数据进行删除或迁移,以节省存储空间。
- 滚动索引:按照时间周期(如每天、每周)创建新的索引,便于管理和维护大量时间序列数据。例如,每天创建一个新的索引来存储当天的交易记录。
使用不同时间单位指定时间范围
- 毫秒(ms):
在查询语句中,可以在时间值后加上
ms
后缀。例如,使用range
查询最近10分钟(600000毫秒)内的数据:
{
"query": {
"range": {
"timestamp": {
"gte": "now-10m",
"lt": "now"
}
}
}
}
这里虽然没有直接写毫秒,但Elasticsearch内部会将now-10m
转换为毫秒计算。如果要直接写毫秒,比如查询最近600000毫秒内的数据:
{
"query": {
"range": {
"timestamp": {
"gte": "now-600000ms",
"lt": "now"
}
}
}
}
- 秒(s):
在时间值后加上
s
后缀。例如,查询最近60秒内的数据:
{
"query": {
"range": {
"timestamp": {
"gte": "now-60s",
"lt": "now"
}
}
}
}
- 分钟(m):
在时间值后加上
m
后缀。如查询最近30分钟内的数据:
{
"query": {
"range": {
"timestamp": {
"gte": "now-30m",
"lt": "now"
}
}
}
}
- 小时(h):
在时间值后加上
h
后缀。例如,查询最近2小时内的数据:
{
"query": {
"range": {
"timestamp": {
"gte": "now-2h",
"lt": "now"
}
}
}
}
- 天(d):
在时间值后加上
d
后缀。比如,查询最近7天内的数据:
{
"query": {
"range": {
"timestamp": {
"gte": "now-7d",
"lt": "now"
}
}
}
}
- 周(w):
在时间值后加上
w
后缀。如查询最近4周内的数据:
{
"query": {
"range": {
"timestamp": {
"gte": "now-4w",
"lt": "now"
}
}
}
}
- 月(M):
在时间值后加上
M
后缀。例如,查询最近3个月内的数据:
{
"query": {
"range": {
"timestamp": {
"gte": "now-3M",
"lt": "now"
}
}
}
}
- 年(y):
在时间值后加上
y
后缀。比如,查询最近2年内的数据:
{
"query": {
"range": {
"timestamp": {
"gte": "now-2y",
"lt": "now"
}
}
}
}