[英]Elasticsearch : How to use multiple filter and calculation in aggregations?
我正在尝试在 kibana 上做一个功能。 我有一个包含一些字段的订单索引: datetime1
, datetime2
,格式为: yyyy-MM-dd HH:mm
首先,我必须检查datetime1
存在。 其次,我必须检查这 2 个datetime2 - datetime1
之间的差异如果差异是:
我试过的:
GET orders/_search
{
"size": 0,
"aggs": {
"test1": {
"filters": {
"filters": {
"exist_datetime1": {
"exists": {
"field": "datetime1"
}
},
"24_hours": {
"script": {
"script": {
"source": "doc['datetime2'].value - doc['datetime1'].value < 24",
"lang": "painless"
}
}
}
}
}
}
}
}
如何进行多重过滤并在日期之间进行减法? 感谢您的帮助 :)
这是一个好的开始,但是,我认为您需要一些稍微不同的东西。 这是使用由您的脚本提供支持的range
聚合来提供您需要的range
的尝试。
您需要确保两个日期字段都有值( query
部分),然后您可以定义所需的存储桶( < 24h
、 24h - 48h
等)
{
"size": 0,
"query": {
"bool": {
"filter": [
{
"exists": {
"field": "datetime1"
}
},
{
"exists": {
"field": "datetime2"
}
}
]
}
},
"aggs": {
"ranges": {
"range": {
"script": {
"lang": "painless",
"source": "(doc['datetime2'].value.millis - doc['datetime1'].value.millis) / 3600000"
},
"ranges": [
{
"to": 24,
"key": "< 24h"
},
{
"from": 24,
"to": 48,
"key": "24h-48h"
},
{
"from": 48,
"key": "> 48h"
}
]
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.