我正在尝试在kibana上执行功能。
我有一些 Realm 的订单的索引:datetime1datetime2,格式为:yyyy-MM-dd HH:mm首先,我必须检查datetime1是否存在。
其次,我必须检查这2个datime datetime2 - datetime1之间的区别
最后,如果差异是,我必须将结果放入不同的aggs中:

  • 少于24小时
  • 在24至48h之间
  • 48-72
  • ....

  • 我试过了
    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部分),然后可以定义所需的存储桶(< 24h24h - 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"
              }
            ]
          }
        }
      }
    }
    

    10-07 15:30