【发布时间】:2021-03-12 22:19:58
【问题描述】:
我正在尝试查找示例 Elasticsearch 查询以返回时间序列中的事件序列。我的数据集是每隔 10 分钟的降雨量值,我想查找所有风暴事件。风暴事件将被视为持续降雨超过 12 小时。这相当于 72 个连续记录的降雨量值大于零。我可以在代码中做到这一点,但要做到这一点,我必须翻阅数千条记录,所以我希望有一个基于查询的解决方案。下面是一个示例文档。
我在一个大学研究小组工作,因此任何涉及高级许可证的解决方案都可能由于预算问题而无法使用。
谢谢!
{
"_index": "rabt-rainfall-2021.03.11",
"_type": "_doc",
"_id": "fS0EIngBfhLe-LSTQn4-",
"_version": 1,
"_score": null,
"_source": {
"@timestamp": "2021-03-11T16:00:07.637Z",
"current-rain-total": 8.13,
"rain-duration-in-mins": 10,
"last-recorded-time": "2021-03-11 15:54:59",
"rain-last-10-mins": 0,
"type": "rainfall",
"rain-rate-average": 0,
"@version": "1"
},
"fields": {
"@timestamp": [
"2021-03-11T16:00:07.637Z"
]
},
"sort": [
1615478407637
]
}
更新 1
感谢@Val,我当前的查询是
GET /rabt-rainfall-*/_eql/search
{
"timestamp_field": "@timestamp",
"event_category_field": "type",
"size": 100,
"query": """
sequence
[ rainfall where "rain-last-10-mins" > 0 ]
[ rainfall where "rain-last-10-mins" > 0 ]
until [ rainfall where "rain-last-10-mins" == 0 ]
"""
}
只有一个规则的序列查询会导致语法错误,从而导致重复。查询正在运行,但不返回任何文档。
更新 2
由于我没有正确转义属性名称,因此没有返回结果。但是,由于两个序列规则,我得到长度为 2 的匹配,而不是任意长度的匹配,直到满足停止子句。
GET /rabt-rainfall-*/_eql/search
{
"timestamp_field": "@timestamp",
"event_category_field": "type",
"size": 100,
"query": """
sequence
[ rainfall where `rain-last-10-mins` > 0 ]
[ rainfall where `rain-last-10-mins` > 0 ]
until [ rainfall where `rain-last-10-mins` == 0 ]
"""
}
【问题讨论】:
-
您能否分享一份您的索引示例文档,以便我们了解可以使用的字段类型?
-
@Val 我已经用示例文档更新了问题