随机采样器聚合编辑

此功能处于技术预览阶段,可能会在未来版本中更改或删除。Elastic 将努力修复任何问题,但技术预览版中的功能不受官方 GA 功能支持 SLA 的约束。

random_sampler 聚合是一种单桶聚合,它将随机文档包含在聚合结果中。采样以牺牲准确性为代价提供了显著的速度提升。

采样是通过提供分片中整个文档集的随机子集来完成的。如果在搜索请求中提供了过滤器查询,则该过滤器将应用于采样的子集。因此,如果过滤器限制性很强,则匹配的文档可能非常少;因此,统计数据可能不那么准确。

此聚合不要与 采样器聚合 混淆。采样器聚合不是针对所有文档;而是对查询匹配的前 n 个文档进行采样。

response = client.search(
  index: 'kibana_sample_data_ecommerce',
  size: 0,
  track_total_hits: false,
  body: {
    aggregations: {
      sampling: {
        random_sampler: {
          probability: 0.1
        },
        aggregations: {
          price_percentiles: {
            percentiles: {
              field: 'taxful_total_price'
            }
          }
        }
      }
    }
  }
)
puts response
GET kibana_sample_data_ecommerce/_search?size=0&track_total_hits=false
{
  "aggregations": {
    "sampling": {
      "random_sampler": {
        "probability": 0.1
      },
      "aggs": {
        "price_percentiles": {
          "percentiles": {
            "field": "taxful_total_price"
          }
        }
      }
    }
  }
}

random_sampler 的顶级参数编辑

probability
(必需,浮点数)文档包含在聚合数据中的概率。必须大于 0,小于 0.5,或正好等于 1。概率越低,匹配的文档越少。
seed
(可选,整数)用于生成文档随机样本的种子。提供种子时,调用之间的文档随机子集是相同的。

采样是如何工作的?编辑

聚合是索引中所有文档的随机样本。换句话说,采样是在文档的背景集上进行的。如果提供了查询,则如果文档与查询匹配并且文档在随机样本中,则返回该文档。采样不是对匹配的文档进行的。

考虑文档集 [1, 2, 3, 4, 5]。您的查询匹配 [1, 3, 5],随机采样的集合是 [2, 4, 5]。在这种情况下,返回的文档将是 [5]

这种类型的采样在查询延迟方面提供了几乎线性的改进,这与采样减少文档集大小的程度有关

Graph of the median speedup by sampling factor

此图是包含 6300 万个文档的测试数据集的大多数聚合的典型加速情况。确切的常数将取决于数据集大小和分片数量,但速度与概率之间关系的形式普遍适用。对于某些聚合,加速可能不那么明显。这些聚合具有一些与看到的文档数量无关的恒定开销。即使对于那些聚合,速度提升也可能很显著。

样本集是使用几何分布((1-p)^(k-1)*p)跳过文档生成的,成功概率为提供的 probability(分布方程中的 p)。从分布返回的值指示在背景中要跳过多少个文档。这相当于随机均匀地选择文档。因此,成功之前的预期失败次数为 (1-p)/p。例如,对于 "probability": 0.01,预期失败次数(或跳过的平均文档数)将为 99,方差为 9900。因此,如果您的索引中只有 80 个文档或与您的过滤器匹配的文档只有 80 个,则您很可能不会收到任何结果。

Graph of the relative error by sampling probability and doc count

在上图中,p 是提供给聚合的概率,n 是与提供的任何查询匹配的文档数量。您可以看到异常值对 summean 的影响,但是当在更高的采样率下仍然匹配许多文档时,相对误差仍然很低。

这表示对典型的正偏态 APM 数据集进行聚合的结果,该数据集在上尾也有异常值。发现相对误差对样本大小的线性依赖性普遍成立,但斜率取决于被聚合量的变化。因此,您自己数据中的方差可能会导致相对误差率以不同的速率增加或减少。

随机采样器一致性编辑

对于给定的 probabilityseed,当从同一个分片采样未更改的数据时,随机采样器聚合是一致的。但是,这是背景随机采样,如果特定文档是否包含在采样集中取决于当前段的数量。

这意味着,副本分片与主分片可能会返回不同的值,因为采样了不同的特定文档。

如果分片通过文档添加、更新、删除或段合并而发生更改,则采样的特定文档可能会更改,因此结果统计信息也可能会更改。

从随机采样器聚合中使用的结果统计信息是近似值,应这样对待。

随机采样的特殊情况编辑

随机采样器聚合返回的所有计数都经过缩放,以简化可视化和计算。例如,当随机采样 日期直方图聚合 时,每个桶的每个 doc_count 值都按 random_sampler probability 值的倒数进行缩放。因此,如果 doc_count 对于 probability: 0.1 的桶为 10,000,则聚合的实际文档数为 1,000

基数聚合 是一个例外。唯一项计数不适合自动缩放。解释基数计数时,请将其与 random_sampler 聚合中顶级 doc_count 中提供的采样文档数进行比较。它可以让您了解唯一值占总值的百分比。但是,它可能无法反映给定字段的准确唯一值数量。