面试题答案
一键面试{
"query": {
"bool": {
"filter": [
{
"range": {
"your_date_field": {
"gte": "now-3M/M",
"lt": "now/M"
}
}
},
{
"script": {
"script": {
"source": "def dayOfMonth = doc['your_date_field'].value.dayOfMonth; def daysInMonth = doc['your_date_field'].value.daysInMonth; return dayOfMonth <= (daysInMonth - 7);",
"lang": "painless"
}
}
}
]
}
}
}
请将your_date_field
替换为实际在Elasticsearch索引中存储日期的字段名。上述查询请求体实现了从当前时间往前推3个月的范围查询,并通过脚本过滤掉每个月的最后一周的数据。首先使用range
查询确定时间范围,然后通过script
脚本过滤掉每月最后一周的数据,这里假设每月最后一周是从每月总天数往前推7天。