php - Elasticsearch:如何在聚合中使用多重过滤和计算?

标签 php elasticsearch kibana

我正在尝试在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"
              }
            ]
          }
        }
      }
    }
    

    关于php - Elasticsearch:如何在聚合中使用多重过滤和计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64755179/

    相关文章:

    PHP 和 mySQLi : Do I still need to check user input when using prepare statements?

    java - Elasticsearch中的49条记录后发生异常

    json - curl 以添加索引模式和json文件以创建仪表板

    kibana - 在 Vega/Kibana 中仅显示一个数字

    elasticsearch - logstash将字符串转换为日期

    php - 实体选择列表形式的其他

    php - MySQL 中是否有任何查询可以获取选定的列标题?

    php - 在 mysql 8 中使用 GROUP BY

    elasticsearch - Elasticsearch edge_ngram token_chars空格

    elasticsearch - Elasticsearch具有AND条件的嵌套文档