首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Elasticsearch中按子聚合结果进行过滤

如何在Elasticsearch中按子聚合结果进行过滤
EN

Stack Overflow用户
提问于 2020-11-10 02:01:47
回答 3查看 45关注 0票数 1

我得到了以下弹性搜索查询,以便获得按产品id和销售小时分组的每小时产品销售量。

代码语言:javascript
运行
复制
POST /my_sales/_search?size=0
{
  "aggs": {
    "sales_per_hour": {
      "date_histogram": {
        "field": "event_time",
        "fixed_interval": "1h",
        "format": "yyyy-MM-dd:HH:mm"
      },
      "aggs": {
        "sales_per_hour_per_product": {
          "terms": {
            "field": "name.keyword"
          }
        }
      }
    }
  }
}

数据的一个示例:

代码语言:javascript
运行
复制
{
    "@timestamp" : "2020-10-29T18:09:56.921Z",
    "name" : "my-beautifull_product",
    "event_time" : "2020-10-17T08:01:33.397Z"
}

这个查询返回几个存储桶(每小时一个,每个产品),但我想只检索那些doc_count大于10的存储桶,这是可能的吗?对于这些结果,我想知道产品的id和event_time存储桶。

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

发布于 2020-11-10 02:41:06

也许使用Bucket Selector功能可以帮助过滤掉结果。

票数 1
EN

Stack Overflow用户

发布于 2020-11-10 09:46:09

尝试下面的搜索查询:

代码语言:javascript
运行
复制
{
  "aggs": {
    "sales_per_hour": {
      "date_histogram": {
        "field": "event_time",
        "fixed_interval": "1h",
        "format": "yyyy-MM-dd:HH:mm"
      },
      "aggs": {
        "sales_per_hour_per_product": {
          "terms": {
            "field": "name.keyword"
          },
          "aggs": {
            "the_filter": {
              "bucket_selector": {
                "buckets_path": {
                  "the_doc_count": "_count"
                },
                "script": "params.the_doc_count > 10"
              }
            }
          }
        }
      }
    }
  }
}

它会根据 "params.the_doc_count > 10"过滤出计数大于10的所有文档

票数 1
EN

Stack Overflow用户

发布于 2020-11-11 01:33:19

谢谢你的帮助这离我想要的不远,但不完全是;有了桶选择器,我有了类似的东西:

代码语言:javascript
运行
复制
"aggregations" : {
    "sales_per_hour" : {
      "buckets" : [
        {
          "key_as_string" : "2020-08-31:23:00",
          "key" : 1598914800000,
          "doc_count" : 16,
          "sales_per_hour_per_product" : {
          "doc_count_error_upper_bound" : 0,
          "sum_other_doc_count" : 0,
          "buckets" : [
          {
              "key" : "my_product_1",
              "doc_count" : 2
          },
          {
              "key" : "my_product_2",
              "doc_count" : 2
          },
          {
              "key" : "myproduct_3",
              "doc_count" : 12
          }
        ]
      }
    }
    ]
}

有时,没有一个存储桶大于10,是否有可能具有相同的东西,但将_count上的过滤器应用于第二级聚合(sales_per_hour_per_product)而不是第一级聚合(sales_per_hour)?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64756889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档