当前位置: 首页 > 知识库问答 >
问题:

带范围计数的Agg计数

訾高明
2023-03-14

我医生看起来像

{
      "path": "/foo/bar",
      "userId" : "33",
}

我想拥有超过

100个文档在50到100个之间少于100个文档我尝试使用不同的聚合,但我不知道如何在另一个聚合的计数上进行范围聚合

谢谢你的帮助,

共有1个答案

宫弘亮
2023-03-14

您需要使用术语聚合和bucket selector聚合,以根据用户的单据计数来分离用户ID

在下面的示例中,考虑5个“userid”:“33”文档、3个“userid”:“34”文档和1个“userid”:“35”文档。现在搜索查询将基于

  1. 单据计数小于或等于2
  2. 的用户计数
  3. 单据计数介于2和4之间的用户计数
  4. 单据计数大于或等于4的用户计数

添加具有索引数据、搜索查询和搜索结果的工作示例

索引数据:

{
      "path": "/foo/bar",
      "userId" : "34"
}
{
      "path": "/foo/bar",
      "userId" : "34"
}
{
      "path": "/foo/bar",
      "userId" : "34"
}
{
      "path": "/foo/bar",
      "userId" : "33"
}
{
      "path": "/foo/bar",
      "userId" : "33"
}
{
      "path": "/foo/bar",
      "userId" : "33"
}
{
      "path": "/foo/bar",
      "userId" : "33"
}
{
      "path": "/foo/bar",
      "userId" : "33"
}
{
      "path": "/foo/bar",
      "userId" : "35"
}

搜索查询:

{
  "size": 0,
  "aggs": {
    "userId_lessThanEqualTo2": {
      "terms": {
        "field": "userId.keyword"
      },
      "aggs": {
        "less_than_2": {
          "bucket_selector": {
            "buckets_path": {
              "the_doc_count": "_count"
            },
            "script": "params.the_doc_count < 2"
          }
        }
      }
    },
    "userId_btw2-4": {
      "terms": {
        "field": "userId.keyword"
      },
      "aggs": {
        "less_than_4": {
          "bucket_selector": {
            "buckets_path": {
              "the_doc_count": "_count"
            },
            "script": "params.the_doc_count >= 2 && params.the_doc_count < 4"
          }
        }
      }
    },
    "userId_greaterThanEqualTo4": {
      "terms": {
        "field": "userId.keyword"
      },
      "aggs": {
        "greater_than_4": {
          "bucket_selector": {
            "buckets_path": {
              "the_doc_count": "_count"
            },
            "script": "params.the_doc_count >= 4"
          }
        }
      }
    }
  }
}

搜索结果:

 "aggregations": {
    "userId_btw2-4": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "34",
          "doc_count": 3
        }
      ]
    },
    "userId_greaterThanEqualTo4": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "33",
          "doc_count": 5
        }
      ]
    },
    "userId_lessThanEqualTo2": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "35",
          "doc_count": 1
        }
      ]
    }
  }
 类似资料:
  • 我在DynamoDB中有一个表,如下所示: 我在表中添加了一个关于“category”的全局二级索引,它工作得很好,并在item Count下给出了表中的条目数。 然后我意识到,我实际上需要能够在一个特定的“类别”中搜索,但按“userrating”排序。 谢谢你的帮助。

  • 我的方法是生成所有素数直到(埃拉托色尼筛),并检查给定范围内的每个数是否可被素数的平方整除。这些数字的计数从范围的长度中减去,以给出平方自由数。 但是这种方法在复杂度上超时了,请建议一些其他的方法

  • 问题内容: 我在存储过程中使用“设置RowCount”。我有一个问题,Set RowCount的范围是什么?考虑以下SP 现在在上面的SP中,您必须看到我的SetRowcount语句不匹配。所以我的问题是,如果我忘记在开头的“ Set RowCount N”语句中添加“ Set RowCount 0”,该怎么办?需要吗?这会影响我的应用程序中其余SP的执行吗? 问题答案: 据我所知,与注释中链接的

  • 我参加了一个编程比赛,我无法解决问题,问题是: 给定一个n个整数的数组A,我需要计算给定范围内求逆的次数。提供一个整数m,它表示范围的数量,然后是m行,在每一行中给出两个整数li和ri。 我们必须只计算指定范围内的反转,即从li到ri(包括0)的反转(基于0的索引)。 如果 A[i] 两个元素 A[i] 和 A[j] 添加到反演中 反转是: 输入: 输出: 约束: 我知道在整个数组上计算O(nlo

  • 问题内容: 我有一张table,上面有所有学生的评分。我正在尝试获得范围内所有学生的人数,例如 0-9 =学生人数9 , 10 -19 =学生人数0 ,依此类推,最多100。 另外,如果有一些机构可以指出关于 案例陈述 的不错的教程,那将是非常好的 给出的答案很好。 但我的范围是固定的。如果没有申请人,我也必须显示0。 这是我的问题的主要区别。就像我也显示了类别。 问题答案: 您不需要声明。您可以

  • 假设您有一个间隔列表,例如[(0 4),(1 3),(2 5),(2 6)]。此列表未排序。然后给您一个范围,如[1 5]。您必须返回适合范围内的间隔数。在这个问题中,它将返回2。((1 3)和(2 5)) 间隔列表保持不变,但我们最多得到100000个查询,每个查询由一个范围组成。对于每个范围查询,我们必须返回适合其中的间隔数。 在研究之后,我读到了间隔树。但是,您只能查询与任何给定范围重叠的间