ES 使用脚本进行时间区间查询
项目需求:使用es查询获取某个日期区间内每天早高峰的数据量,技术栈使用es中的script,其中时间参数在es存储的时候时区偏移了八个小时,
"alarmTime": "2022-08-31T08:59:52+0800"
,在脚本中做如下处理:
在这里插入代码片
"query": {
"bool": {
"must": [
{
"range": {
"alarmTime": {
"from": "2022-08-01 00:00:00",
"to": "2022-09-01 23:59:59",
"include_lower": true,
"include_upper": false
}
}
},
{
"script": {
"script": {
"source": "def current=doc['alarmTime'].value;def adjustedDate = current.plusHours(8);def wang=adjustedDate.getHour();return wang>=params.min && wang<params.max",
"params": {
"min": 8,
"max": 9
},
"lang": "painless"
}
}
}
]
}
}
另外说明:我使用的es版本为7.9的,不同版本在脚本中获取参数值有所不同,下面贴一下7.9版本的获取值的方式
脚本提取数据
表达式 | 描述 |
doc[‘field_name’].value | 字段的本地值 |
doc[‘field_name’].values | 字段的本地数组值。如果字段没有值,返回一个空数组 |
doc[‘field_name’].empty | 布尔值,表示文档中的字段是否有值 |
doc[‘field_name’].multiValued | 布尔值,表示文档中有多个值的字段 |
doc[‘field_name’].lat | 地理点类型的纬度 |
doc[‘field_name’].lon | 地理点类型的经度 |
doc[‘field_name’].lats | 地理点类型的纬度(复数) |
doc[‘field_name’].lons | 地理点类型的经度(复数) |
doc[‘field_name’].distance(lat,lon) | 地理点字段和提供的经纬度之间的平面距离(米) |
doc[‘field_name’].distanceWithDefault(lat,lon,default) | 地理点字段和提供的经纬度和默认值的平面距离(米) |
doc[‘field_name’].distanceInMiles(lat,lon) | 地理点字段和提供的经纬度之间的平面距离(英里) |
doc[‘field_name’].distanceInMilesWithDefault(lat,lon,default) | 地理点字段和提供的经纬度和默认值的平面距离(英里) |
doc[‘field_name’].distanceInKm(lat,lon) | 地理点字段和提供的经纬度之间的平面距离(千米) |
doc[‘field_name’].distanceInKmWithDefault(lat,lon,default) | 地理点字段和提供的经纬度和默认值的平面距离(千米) |
doc[‘field_name’].arcDistance(lat,lon) | 地理点字段和提供的经纬度之间的天穹距离(米) |
doc[‘field_name’].arcDistanceWithDefault(lat,lon,default) | 地理点字段和提供的经纬度和默认值的天穹距离(米) |
doc[‘field_name’].arcDistanceInMiles(lat,lon) | 地理点字段和提供的经纬度之间的天穹距离(英里) |
doc[‘field_name’].arcDistanceInMilesWithDefault(lat,lon,default) | 地理点字段和提供的经纬度和默认值的天穹距离(英里) |
doc[‘field_name’].arcDistanceInKm(lat,lon) | 地理点字段和提供的经纬度之间的天穹距离(千米) |
doc[‘field_name’].arcDistanceInKmWithDefault(lat,lon,default) | 地理点字段和提供的经纬度和默认值的天穹距离(千米) |
doc[‘field_name’].factorDistance(lat,lon) | 地理点字段从提供的经纬度之间的距离因子 |
doc[‘field_name’].factorDistance(lat,lon,default) | 地理点字段从提供的经纬度和默认值的距离因子 |
doc[‘field_name’].geohashDistance(geohash) | 地理点字段从提供的地理散列的天穹距离(米) |
doc[‘field_name’].geohashDistanceInKm(geohash) | 地理点字段从提供的地理散列的天穹距离(千米) |
doc[‘field_name’].geohashDistanceInMiles(geohash) | 地理点字段从提供的地理散列的天穹距离(英里) |