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

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

  •  
  •   AnyThingElae · 2023-08-10 15:59:08 +08:00 · 668 次点击
    这是一个创建于 469 天前的主题,其中的信息可能已经有所发展或是发生改变。

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