弹性搜索:获取值

时间:2018-01-22 09:38:26

标签: elasticsearch lucene kibana grafana

我想在ElasticSearch上存储一些移动应用版本数据,并在Kibana / Grafana上进行可视化。目的是了解应用程序版本的用法。

假设我在ElasticSearch(简化)中有这些“移动应用初始化”事件条目:

* clientId: ABC, clientVersion: 1.2.3, time: 2018-01-01
* clientId: DEF, clientVersion: 1.2.3, time: 2018-01-02
* clientId: GHI, clientVersion: 1.2.3, time: 2018-01-03
* clientId: DEF, clientVersion: 1.2.3, time: 2018-01-04
* clientId: GHI, clientVersion: 1.2.4, time: 2018-01-05

我希望在Kibana / Grafana中有一个可视化:

* version 1.2.3: 2 installations
* version 1.2.4: 1 installation

根据上述数据,ABC和DEF目前正在使用1.2.3版本。 版本1.2.4由1.2.4使用。

  • ABC只有1个条目1.2.3。
  • DEF有2个条目,均为1.2.3。由于我希望看到每个客户端使用应用版本,因此应忽略重复数据。
  • GHI有2个条目,1个用1.2.3,1个用1.2.4。但由于最新版本条目为1.2.4,因此忽略1.2.3条目。

如果我在没有ElasticSearch的内存数据中使用某些代码,那么算法将是:

  • 获取每个客户的最新条目
  • 按版本对其进行分组并计算每个条目

问题:

  1. 如何使用ElasticSearch查询获得所需的输出?
  2. 如果问题#1中的问题无法解决,如何在Kibana / Grafana上创建可视化效果?
  3. 请注意,我不想使用update / upsert操作。我只想简单地将文档添加到ElasticSearch。

    更新:有关此问题的更多信息。

    通过这个问题,我可以看到使用top_hits聚合可以重复数据删除: Remove duplicate documents from a search in Elasticsearch

    但是,clientId使用top_hits进行重复数据删除,然后使用terms按clientId进行分组是不可能的。这是因为top_hits聚合不接受任何子聚合。 Google为[top_hits] cannot accept sub-aggregations"

    这是我走了多远:

    GET /metric/_search
    {
      "aggs" : {
        "latestEntriesPerClients" : {
            "terms" : { "field" : "clientid" },
            "aggs": {
            "1": {
              "top_hits": {
                "sort": [{
                    "date": {"order": "desc"}
                }],
                "size": 1
              }
              //, THIS WON'T WORK
              // "aggs": {
              //  "NAME": {
              //    "terms": {"field": "clientVersion"}
              //  }
              //}
            }
          }
        }
      }
    }
    

    简化输出:

    * clientId: ABC, clientVersion: 1.2.3, time: 2018-01-01
    * clientId: DEF, clientVersion: 1.2.3, time: 2018-01-04
    * clientId: GHI, clientVersion: 1.2.4, time: 2018-01-05
    

    现在,我如何将其传输到其他聚合中?我尝试了管道聚合,但未能将这些值分组并计算在上面。

0 个答案:

没有答案