【Elasticsearch】无限制的误差unbounded error

在Elasticsearch中,`terms`聚合的“无限制的误差”(unbounded error)是指当聚合结果按文档计数(`doc_count`)升序排序时,无法准确计算聚合结果的误差范围。这种误差是由于Elasticsearch的分片(shard)机制导致的。

为什么会出现“无限制的误差”?

Elasticsearch的`terms`聚合默认是按文档计数降序排序的,这种情况下,Elasticsearch可以计算出每个桶(bucket)的文档计数误差上限(`doc_count_error_upper_bound`)。这个误差上限是基于分片返回的最大桶的大小计算的。

然而,当`terms`聚合按文档计数升序排序时,Elasticsearch无法准确计算出误差范围,因为分片返回的结果可能不包含某些低频词,而这些词可能在其他分片中存在。由于无法确定这些低频词的完整分布,Elasticsearch无法提供一个可靠的误差上限,因此称为“无限制的误差”。

示例

假设有一个`terms`聚合,按文档计数升序排序:

```json

GET /_search

{

  "aggs": {

    "genres": {

      "terms": {

        "field": "genre",

        "order": { "_count": "asc" }

      }

    }

  }

}

```

在这种情况下,Elasticsearch无法准确报告每个桶的文档计数误差,因此会返回一个值为-1的`doc_count_error_upper_bound`。

如何避免“无限制的误差”?

为了避免这种误差,建议不要使用`terms`聚合按文档计数升序排序。如果需要查找稀有词,可以使用`rare_terms`聚合,它专门用于处理稀有词的场景。

总结

“无限制的误差”是由于Elasticsearch的分片机制和`terms`聚合的实现方式导致的。在按文档计数升序排序时,Elasticsearch无法准确计算误差范围,因此不推荐使用这种排序方式。如果需要处理稀有词或低频词,建议使用`rare_terms`聚合。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值