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

在elasticsearch aggs中,不同的计数大于doc_count

葛航
2023-03-14

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

唯一值大于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,000precision_threshold,只过滤了一个eventId
,但结果错误相同。基数预计小于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
    }
}

}

共有1个答案

田阳泽
2023-03-14

精度阈值的最高值是40,000。这应该会稍微改善结果,但是对于如此大的不同值计数,可能会有20%的正负误差。即使是较小的值也会发生这种情况。

 类似资料:
  • 我在BigQuery:count distinct concat(col1,col2,col3,col4,col5)中尝试了PostgreSQL:count distinct(col1,col2,col3,col4,col5) 我的设想是,我需要在BigQuery中获得与PostgreSQL相同的结果 虽然这个场景适用于3列,但我并没有得到与5列PostgreSQL相同的值。 示例查询: 当我删除

  • 问题内容: Elasticsearch文档 建议 *他们的一段代码 *文件固定 对应于sql查询 但实际上对应于 我不想知道我有多少不同的值,但是什么是不同的值。有人知道如何实现吗? 问题答案: 在字段上使用术语汇总。并且您需要注意如何分析要获取不同值的字段,这意味着您需要确保在建立索引时没有对它进行标记,否则聚合中的每个条目都是一个不同的术语,属于字段内容。 如果您仍然希望令牌化并使用聚合,则可

  • 我想看看是否有一个有效的方法来比较计数(ACount,BCount,CCount,DCount,ECount),并评估JAVA中哪个计数最大? 该程序可以使用递归,但我想知道实现这一点的任何优化方法。

  • 问题内容: 基本上,我一直在尝试执行此操作(基于两列的计数不同): 一直在搜寻如何执行此操作,但是没有运气。尝试过此方法,但从未真正起作用。根据两个表的两个属性,这并没有明显的不同: 问题答案: 好的,这将采取一些步骤,请多多包涵。我在这里假设使用SQL Server,但说明应适用于支持1的任何方言: 创建支持该功能的自定义方言: { public MyCustomDialect() { Regi

  • 我知道这不是一个人应该在这里做的事情,尽管我不知道否则我怎么能问这个问题。 我的目标是统计有多少行具有相同的第一预测值(购买、维护等),但评级不同。 我的尝试是通过第一列来计算,然后计算我得到的不同评分,这将是非常棒的。 一个重要的假设是,如果两行相同,则它们已被预先擦除。因此,可以找到不同等级的行,但没有相同的行。 在我的示例中,第1行和第3行是相同的,因此其中一行被擦除,没有问题。然而,对于其

  • 我试图解决这个问题。 给出了一个整数M和一个由N个非负整数组成的非空零索引数组A。数组A中的所有整数都小于或等于M。 一对整数(P,Q),使得0≤ P≤ Q 例如,考虑整数M=6和数组A,这样: 正好有九个不同的切片:(0, 0), (0, 1), (0, 2), (1, 1), (1,2), (2, 2), (3, 3), (3, 4)和(4,4)。 目标是计算不同切片的数量。 提前感谢。