【问题标题】:Elasticsearch aggregation - support for GROUP BYElasticsearch 聚合 - 支持 GROUP BY
【发布时间】:2018-01-25 15:33:08
【问题描述】:

我有一个弹性搜索集群,其索引具有以下架构:

{
  "my_index" : {
    "mappings" : {
      "test" : {
        "properties" : {
          "city" : {
            "type" : "keyword"
          },
          "prober" : {
            "type" : "keyword"
          },
          "status" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          },
          "test" : {
            "type" : "keyword"
          },
          "time_taken" : {
            "type" : "float"
          },
          "test_start" : {
            "type" : "date"
          },
          "test_uuid" : {
            "type" : "keyword"
          },
          "validity_start" : {
            "type" : "date"
          },
          "validity_end" : {
            "type" : "date"
          }
        }
      }
    }
  }
}

每个test_uuid 都是唯一的,每个测试都有不同的参数,如架构中所示。 我正在尝试过滤/查找在特定时间戳下落在validity_startvalidity_end 次窗口下的所有文档。 我当前的查询如下所示:

{
  "query": { 
    "bool": { 
      "filter": [ 
        { "range": { "validity_start": { "lte": "<timestamp>" }}},
        { "range": { "validity_end": { "gte": "<timestamp>" }}} 
      ]
    }
  }
}

我有两个问题。

  1. 我想将返回的结果按(test, city, prober) 分组。在(validity_start, validity_end) 的给定窗口内,可能有多个文档具有相同的(test,city,prober) 值。我想过滤除最近执行的测试(可以由test_start 时间确定)之外的所有文档。有没有办法在弹性搜索中使用 aggs 或任何其他功能来做到这一点?

  2. 获得这些结果后,我想基于 status 字段跨某些字段执行聚合。例如,如果有 100 个结果分布在 2 个测试中,testAtestB,我想汇总

    一个。具有 testA 并通过的结果数

    b.具有 testA 且失败的结果数

    c。具有 testB 并通过的结果数

    d。具有 testB 且失败的结果数。

    同样适用于城市和探测器。

【问题讨论】:

    标签: elasticsearch elasticsearch-aggregation


    【解决方案1】:

    “一旦我得到这些结果”,您将完成该查询。 Elastic 不支持连接查询。您可以在客户端进行聚合或运行新查询。
    对于您的第一个问题:我总是在 Kibana 中进行可视化(在您的情况下使用子桶术语聚合)并查看它发送的查询(您可以使用可视化底部的小箭头图标获得)。它可能并不总是 100% 准确,但它提供了一个开始。

    【讨论】:

      猜你喜欢
      • 2014-11-22
      • 2014-12-27
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      • 2016-09-27
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多