以下是我用来获取过去三个月(月初)数据的查询。如何将其更改为本周的开始?
{
"size": 10,
"timeout": "1000s",
"query": {
"bool": {
"must": [
{
"match": {
"filter_grouper": "ABC"
}
},
{
"match": {
"state": "High"
}
},
{
"range": {
"end_date": {
"gte": "now-3M/M",
"lte": "now"
}
}
}
]
}
},
"_source": [
"number",
"barrel"
]
}
我尝试使用
{
"range": {
"end_date": {
"gte": "now/yyyy-W/W",
"lte": "now"
}
}
}
但是它抛出了错误-
{
"type": "parse_exception",
"reason": "operator not supported for date math [/yyyy-W/W]"
}
同样适用于
now-1W/W
要在 Elasticsearch 中查询本周的数据(从本周开始),您可以将范围查询与脚本化日期函数结合使用。 Elasticsearch 支持日期数学,这使得动态计算一周的开始变得更容易,无论当前星期如何。
以下是实现它的方法:
now/w
的日期数学来确定本周的开始时间。now
指当前日期和时间。/w
调整为一周的开始(Elasticsearch 中默认为星期一)。range
查询根据时间戳过滤文档。例如:{
"query": {
"range": {
"timestamp_field": {
"gte": "now/w",
"lt": "now+1w/w",
"format": "strict_date_optional_time"
}
}
}
}
说明
gte
(大于或等于):过滤从本周开始的数据。lt
(小于):排除下周开始的数据,只保留本周的数据。timestamp_field
:将其替换为文档中日期字段的名称(例如,@timestamp
)。now
参数或配置集群的时间设置。GET your-index-name/_search
{
"query": {
"range": {
"@timestamp": {
"gte": "now/w",
"lt": "now+1w/w",
"format": "strict_date_optional_time"
}
}
}
}
将
your-index-name
替换为相关索引名称。
结果 此查询将获取从本周开始到现在的所有文档,无论本周内的当前日期如何。
您可以使用下面的查询来获取本周的数据。它将提供从周一(00:00:00.000 小时)到周日(23:59:59.999 小时)的数据。
{
"size": 10,
"timeout": "1000s",
"query": {
"bool": {
"must": [
{
"match": {
"filter_grouper": "ABC"
}
},
{
"match": {
"state": "High"
}
},
{
"range": {
"end_date": {
"gte": "now/w",
"lte": "now/w"
}
}
}
]
}
},
"_source": [
"number",
"barrel"
]
}
如果您想从周日到周六开始一周,那么您可以更改条件如下:
{
"range": {
"end_date": {
"gte": "now/w-1d",
"lte": "now/w-1d"
}
}
}
您可以在 Kibana 的搜索请求中添加
?explain=true
来查找查询的日期从哪个日期到哪个日期,这将返回毫秒响应,以便您可以在线将毫秒转换为日期并验证它。以下是示例。
POST test/_search?explain=true
{
"sort": [
{
"timestamp": {
"order": "asc"
}
}
],
"query": {
"range": {
"timestamp": {
"gte": "now/w",
"lte":"now/w"
}
}
}
}
回应:
{
"_shard": "[test][0]",
"_node": "Uy1khygkQweGl25lvrzmvg",
"_index": "test",
"_id": "12",
"_score": null,
"_source": {
"user_id": "101",
"timestamp": "2024-11-18T12:10:30Z",
"priority": "1"
},
"sort": [
1731931830000
],
"_explanation": {
"value": 1,
"description": "timestamp:[1731888000000 TO 1732492799999]",
"details": []
}
}
这里,
1731888000000
毫秒表示Mon Nov 18 2024 00:00:00.000
日期,1732492799999
表示Sun Nov 24 2024 23:59:59.999
。希望这对您有帮助。