我正在尝试在kibana上执行功能。
我有一些 Realm 的订单的索引:datetime1
,datetime2
,格式为:yyyy-MM-dd HH:mm
首先,我必须检查datetime1
是否存在。
其次,我必须检查这2个datime datetime2 - datetime1
之间的区别
最后,如果差异是,我必须将结果放入不同的aggs中:
我试过了
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
aggregation提供所需的范围。
您需要确保两个日期字段都具有值(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"
}
]
}
}
}
}