【问题标题】:distinct count is greater than doc_count in elasticsearch aggselasticsearch aggs中的不同计数大于doc_count
【发布时间】:2015-01-26 00:38:08
【问题描述】:

我写了一些 aggs 查询来获取总数(总和)和唯一计数。 但结果有点混乱。

唯一值大于 doc_count。
可能吗?

我知道基数 aggs 是实验性的,可以得到不同值的近似计数。
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-cardinality-aggregation.html

但是结果太糟糕了。 正如您所看到的,有许多唯一大于 doc_count 的存储桶。
请求格式有问题吗?还是基数限制?

50 万份文档已编入索引
并且有 15 种 eventID
ES 1.4 使用。

请求

{
"size": 0,
"_source": false,
"aggs": {
    "eventIds": {
        "terms": {
            "field": "_EventID_",
            "size": 0
        },
        "aggs": {
            "unique": {
                "cardinality": {
                    "field": "UUID"
                }
            }
        }
    }
}  

回复

{
"took": 383,
"timed_out": false,
"_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
},
"hits": {
    "total": 550971,
    "max_score": 0,
    "hits": [

    ]
},
"aggregations": {
    "eventIds": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 0,
        "buckets": [
            {
                "key": "red",
                "doc_count": 165110,
                "unique": {
                    "value": 27423
                }
            },
            {
                "key": "blue",
                "doc_count": 108376,
                "unique": {
                    "value": 94775
                }
            },
            {
                "key": "yellow",
                "doc_count": 78919,
                "unique": {
                    "value": 70094
                }
            },
            {
                "key": "green",
                "doc_count": 60580,
                "unique": {
                    "value": 78945
                }
            },
            {
                "key": "black",
                "doc_count": 49923,
                "unique": {
                    "value": 56200
                }
            },
            {
                "key": "white",
                "doc_count": 38744,
                "unique": {
                    "value": 45229
                }
            },

编辑。更多测试

我再次尝试使用 1,000 个仅过滤一个 eventId 的precision_threshold
但结果的错误是一样的。 基数预计小于 30,000 但超过 66,000(这大于总文档大小)

doc_count : 65,672(没问题。对) 基数:66,037(大于 doc_count) 实际基数:约 23,000(由 rdbms 脚本计算...)

请求

{
"size": 0,
"_source": false,
"query": {
    "term": {
        "_EventID_": "packdownload"
    }
},
"aggs": {
    "unique": {
        "cardinality": {
            "field": "UUID",
            "precision_threshold": 10000
        }
    }
}

}

回复

{
"took": 28,
"timed_out": false,
"_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
},
"hits": {
    "total": 65672,
    "max_score": 0,
    "hits": []
},
"aggregations": {
    "unique": {
        "value": 66037
    }
}

}

【问题讨论】:

  • 试试"precision_threshold": 1000,看看你会得到什么结果。如果您查看显示您提供的链接中的相对错误的图形,您会发现低阈值存在相当大的错误。
  • @Andrei 我不知道你所说的“图形显示”是什么。 :(
  • elasticsearch.org/guide/en/elasticsearch/reference/current/… 里面有一个图表。你试过精度 1000 吗?
  • @Andrei 好的。我试过 10000 而不是 1000。10000 与 100 几乎相同。但我会再试一次 1000。多谢。 :)

标签: elasticsearch distinct cardinality elasticsearch-aggregation


【解决方案1】:

精度阈值的最高值为 40,000。这应该会稍微改善结果,但是由于不同值的计数如此之大,可能会有 20% 的误差。它甚至发生在较小的值上。

【讨论】:

  • 来自docs:“实际上,即使计算数百万个唯一值,阈值 100 也能将误差保持在 5% 以下。”
猜你喜欢
  • 2020-12-03
  • 2019-10-09
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 2018-07-30
相关资源
最近更新 更多