当前位置: 首页 > 面试题库 >

计算子聚合返回的存储桶

仲孙景胜
2023-03-14
问题内容

我需要计算管道聚合返回的结果集中的存储桶数。问题是我的查询在这里使用脚本选择器:

POST visitor_carts/_search
{
  "size": 0,
  "aggs": {
    "visitors": {
      "terms": {"field" : "visitor_id"},
      "aggs": {
        "one_purchase": {
          "bucket_selector": {
            "buckets_path": {
              "nb_purchases": "_count"
            },
            "script": "params.nb_purchases == 3"
          }
        }
      }
    }
  }
}

返回类似这样的内容:

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 5,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "aggregations" : {
    "visitors" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : "2",
          "doc_count" : 3
        },
        {
          "key" : "3",
          "doc_count" : 3
        }
      ]
    }
  }
}

在该buckets键下,我可以看到一个满足我条件的访问者列表(由标识的每个访问者都visitor_id必须在visitor_carts索引中恰好有三个文档),但这不是很有用,因为它可以处理成千上万的访问者。我正在使用PHP处理结果,从理论上讲,它可以计算结果集,但是对于大量的访问者来说,这并不是最好的主意。有没有一种方法可以仅在doc_count_error_upper_bound和旁边输出有效存储区的数量sum_other_doc_countbucket_count汇总统计数据中没有包含统计信息,这有点奇怪,因为它似乎很有用。

这是我的visitor_carts映射:

{
  "mapping": {
    "_doc": {
      "dynamic": "false",
      "properties": {
        "created_dt": {
          "type": "date",
          "format": "yyyy-MM-dd HH:mm:ss"
        },
        "order_id": {
          "type": "keyword"
        },
        "visitor_id": {
          "type": "keyword"
        }
      }
    }
  }
}

问题答案:

您可以利用“
统计数据桶聚合”来获取存储桶数。

以下是查询的方式。

汇总查询:

POST visitor_carts/_search
{
  "size": 0,
  "aggs": {
    "visitors": {
      "terms": {
        "field" : "visitor_id"
      },
      "aggs": {
        "one_purchase": {
          "bucket_selector": {
            "buckets_path": {
              "nb_purchases": "_count"
            },
            "script": "params.nb_purchases == 3"
          }
        }
      }
    },
    "mybucketcount":{
      "stats_bucket": {
        "buckets_path":"visitors._count"
      }
    }
  }
}

汇总结果:

{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 8,
    "max_score": 0,
    "hits": []
  },
  "aggregations": {
    "visitors": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "2",
          "doc_count": 3
        },
        {
          "key": "3",
          "doc_count": 3
        }
      ]
    },
    "mybucketcount": {
      "count": 2,              <---- This is the count you are looking for
      "min": 3,
      "max": 3,
      "avg": 3,
      "sum": 6
    }
  }
}

让我知道是否有帮助!



 类似资料:
  • 问题内容: 如何计算存储过程将以最快的方式返回的行数。存储过程返回大约100K到1M记录的行。 问题答案: 选择: 执行存储过程后。

  • 此处为elasticsearch新用户,但存在术语聚合问题。我为187份文档编制了索引,其中包含“名称”、“主机”、“风险”等字段。字段风险有4个唯一值(“关键”、“高”、“中”、“低”、“信息”),我正在运行这样的术语聚合: 我希望得到一个结果,说明我有x个临界值,x个高值等等。问题是,我没有得到返回的桶。 我的Elasticsearch版本是7.12.0有什么想法吗 > 编辑:这是映射: 以下

  • 我想根据top hits聚合中第一个元素所拥有的属性,从terms聚合中订购Bucket。 我的尽力而为查询如下(有语法错误): 有人知道如何做到这一点吗? 例子: 按“a”分组,按“id”(desc)排序存储桶,并按“b”(desc)排序最热门的内容,将给出:

  • 我是Java8流api的新手,我正在寻求一种解决方案,以运行我的对象列表并聚合某些属性,从而最终能够获得该属性类型和所有聚合结果的新列表。 例如,我的列表中有10个person对象,我想要一个基于第一人称年龄的所有年龄差异的列表 在执行流魔术之后,结果应该是int类型的,并且看起来如下所示

  • 我正在使用Elasticsearch bucket聚合。我有一组文档,每个文档都有一个类别字段,它是一个数组。我需要获得每个类别的数量以及搜索结果。但目前,我得到了错误的doc\u计数。 这是我的聚合查询 } 下面是我得到的错误doc\u计数的结果。

  • 问题内容: 我要分析一组客户。我对客户增长感兴趣,例如: 自上周以来增加了43位新客户(+ 32%) 自去年以来+12650(+ 1140%)新客户 该怎么办: 获得本周创造的客户 获取上周创建的客户 数他们 计算差异(百分比) 因此,首先,我将创建一个直方图,按周对客户进行分类: 这例如导致 然后,我只需要获取最后两个条目并计算差异,然后将其分配给buckets集合之外的字段。在Elastics