V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
AnyThingElae
V2EX  ›  问与答

如何解决 elasticsearch 在大量数据的情况下,使用 cardinality 去重,精度下降的问题

  •  
  •   AnyThingElae · 261 天前 · 471 次点击
    这是一个创建于 261 天前的主题,其中的信息可能已经有所发展或是发生改变。

    数据量在 2000W 左右,使用 cardinality 去重,发现数据不准,和直接拿出所有数据去重的数量有不小的差距,大家是如何应对这种情况的?

    GET _index12345/_search
    {
      "size": 0,
      "aggs": {
        "t": {
          "cardinality": {
            "field": "id",
            "precision_threshold": 40000
          }
        }
      }
    }
    
    8 条回复    2023-08-11 17:09:53 +08:00
    Saturn72
        1
    Saturn72  
       261 天前
    ZYXDemo
        2
    ZYXDemo  
       261 天前
    忽略了,因为业务上不需要那么准。。。
    zitionguo
        3
    zitionguo  
       260 天前
    通过桶数量获取去重后的总数量,不过桶数量好像有 65536 的限制,可以通过修改 settings - index.max_terms_count 来控制,慎改😂
    {
    "size": 0,
    "aggregations": {
    "xxx": {
    "terms": {
    "field": "uniqueKey",
    "size": 65536
    }
    }
    }
    }
    AnyThingElae
        4
    AnyThingElae  
    OP
       260 天前
    @zitionguo 我们现在就是用的这种方案,数据量小的月份还能挺住,数据量大起来就报错了。。
    zitionguo
        5
    zitionguo  
       260 天前
    @AnyThingElae 哈哈,我之前也用的这个,超过这个数量只能增加查询条件(前端提示一下),其实体验不太好。
    zitionguo
        6
    zitionguo  
       260 天前
    问了下 gpt ,不知到有没有用😂。
    使用 HyperLogLog++ 数据结构:Elasticsearch 在近期的版本中引入了 HyperLogLog++ 数据结构,它在基数估计方面比传统的 HyperLogLog 算法更准确。可以使用 cardinality 聚合的 method 参数来指定使用 HyperLogLog++。
    "aggs": {
    "unique_count": {
    "cardinality": {
    "field": "your_field",
    "method": "hll++"
    }
    }
    }
    AnyThingElae
        7
    AnyThingElae  
    OP
       260 天前
    @zitionguo 我试了下,得到[cardinality] unknown field [method],不知道是版本的问题,还是 gpt 胡诌的答案,我问了下 gpt 也是出了个其他的未知字段...
    zitionguo
        8
    zitionguo  
       260 天前
    @AnyThingElae #7 官网也没翻到,确实是编的😵‍💫
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1014 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 18:53 · PVG 02:53 · LAX 11:53 · JFK 14:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.