V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
drymonfidelia
V2EX  ›  数据库

亿级订单表 要对物流追踪号支持 LIKE %123% 这样的前后缀都模糊查询 的细节补充

  •  
  •   drymonfidelia · 4 天前 · 1133 次点击
    /t/1086192 这个需求已经有非常多用户反馈了,产品经理一直在催上线,所以我周末晚上来发帖。昨天太晚了(不在国内)发完就去睡觉了,没看大佬们的讨论,因为已经快 70 条回复了,所以新开一贴补充细节

    这套系统是给其它网店用的 SaaS ,总订单量有几亿条,需求是各店需要能模糊搜索自己店的物流追踪号。各店的订单量不固定,有的店有几千万条,有的店是来测试系统的只有几条
    因为用户经常反馈问题的时候是直接扔张截图甚至模糊不清的照片,OCR 也不太好处理,所以需要模糊搜索追踪号

    总结了下大家的评论一共几种方案:

    单独用一张表存自己店追踪号:这样查询效率为什么会比从总表查高呢?不是一样还是不能走索引,如果是 SELECT 一家店的全部追踪号再筛选,和从总表 SELECT 有什么区别呢?
    单独用一张表存逆序的追踪号:产品经理那边测试了同行的产品,确实支持从追踪号中间搜索,不知道是怎么实现
    ClickHouse 和 MySQL 全文索引:有人提到这种方案依赖分词而追踪号不能分词
    5 条回复    2024-11-05 09:33:39 +08:00
    giantreaper0
        1
    giantreaper0  
       4 天前
    ngram 切片,即每三个字符创建一项索引,比如 abcdefg ,就有 abc, bcd, cde, efg 四套。ES 好像是支持这种分词的
    giantreaper0
        2
    giantreaper0  
       4 天前
    @giantreaper0 补充一下,不是三个,是自定义 n 个,例子里是 3
    Gilfoyle26
        3
    Gilfoyle26  
       4 天前
    单独存一张表,不用 innodb
    czjxy881
        4
    czjxy881  
       3 天前   ❤️ 3
    es 里 ngram 分词器,支持配置 min_gram 和 max_gram, 若 min=1,max=4 对于 abcd 就会变成 a,b,c,d,ab,bc,cd,abc,bcd,abcd 这么多 term ,对于随便一个命中的,都可以做到毫秒级召回亿级数据。本质上是用空间换时间。 若是不想空间占用过多,也可以 xgram 后用 match_phrase_prefix
    BanShe
        5
    BanShe  
       3 天前
    @czjxy881 感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2747 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:45 · PVG 19:45 · LAX 03:45 · JFK 06:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.