如何在Elastic中的一个查询DSL中执行n维统计聚合?

zynd9foi  于 2022-09-20  发布在  ElasticSearch
关注(0)|答案(1)|浏览(200)

我刚刚学习了弹性,我想写一些代码来分析不同时间维度的用户请求API。

  • 用户一天请求多少次?
  • 用户一周内请求多少次?
  • 用户一个月内请求了多少次?
  • 用户一年内请求多少次?

代码如下所示:

POST my-index/_count
{
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "user_id.keyword": ["USER_ID"]
          }
        },
        {
          "wildcard": {
            "uri.keyword": "/api-path*"
          }
        },
        {
          "range": {
            "@timestamp": {
              "gte": "now-1y/y",
              "lte": "now/d"
            }
          }
        }
      ]
    }
  }
}

但我应该在不同的@TIMESTAMP参数中将代码发送给弹性四次(现在是-1d/d,现在是-1w/w,现在是-1m/m,现在是-1y/y)。这将耗费大量的网络和计算资源。

有没有什么方法可以把它们放在一个请求中?

zwghvu4y

zwghvu4y1#

TLDR;

使用Elasticsearchmulti-search api是可能的

看起来是这样的:

GET my-index-000001/_msearch
{ }
{"query" : {"match" : { "message": "this is a test"}}}
{"index": "my-index-000002"}
{"query" : {"match_all" : {}}}

Elasticearch的客户端库确实实现了此功能。

  • 巨蟒
  • Java
  • js

相关问题