V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Weixiao0725
V2EX  ›  程序员

现在的模糊查询大家都使用什么解决方案?

  •  
  •   Weixiao0725 · 2022-10-13 08:09:50 +08:00 · 5659 次点击
    这是一个创建于 756 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假设我有很多文本,给定一段模糊的关键字,查询文本所在的文章和上下文,请问目前有什么合适的查询和存储方案吗?目前已知比较成熟的是基于 elastic search ?
    27 条回复    2022-10-22 10:12:11 +08:00
    zzzzzzzzzy
        1
    zzzzzzzzzy  
       2022-10-13 08:39:51 +08:00
    看你数据量,你用 redis 也能做
    XCFOX
        2
    XCFOX  
       2022-10-13 08:58:12 +08:00
    Weixiao0725
        3
    Weixiao0725  
    OP
       2022-10-13 09:08:09 +08:00 via iPhone
    @XCFOX 请问这个支持中文查询吗?
    Weixiao0725
        4
    Weixiao0725  
    OP
       2022-10-13 09:08:38 +08:00 via iPhone
    @zzzzzzzzzy 数据量大概不到 100G 的文本
    demoshengxw
        5
    demoshengxw  
       2022-10-13 09:23:16 +08:00 via iPhone
    方便还是还是 es ,做好分词直接查就好了
    hyqCrystal
        6
    hyqCrystal  
       2022-10-13 09:27:55 +08:00
    数据量不多的话 mysql 好像也支持了。多的话 上 es 吧
    jiangbo212
        7
    jiangbo212  
       2022-10-13 09:37:11 +08:00
    最近在研究 meilisearch, 你这个数据量感觉在它的查询临界点,可能查询速度相比于官网的会慢点。官网显示是支持中文查询的,相比于 es ,易用性强一点
    limbo0
        8
    limbo0  
       2022-10-13 09:57:49 +08:00
    生产可以用 es, 玩玩可以用 meilisearch
    dddd1919
        9
    dddd1919  
       2022-10-13 10:04:17 +08:00
    elastcisearch
    apache solr ,文本搜索不错
    lmshl
        10
    lmshl  
       2022-10-13 10:24:58 +08:00
    需要相关性和 rank 就走 ES ,不需要的话 PostgreSQL 等数据库内置的全文检索也能做
    lmshl
        11
    lmshl  
       2022-10-13 10:26:48 +08:00
    全文检索引擎几乎是不区分语言的,你需要一款分词器,写入的时候提前分好词向量(一般会带有 for index 选项),查询的时候也是(一般会带有 for search 选项)。然后俩词向量去 match
    xuelu520
        12
    xuelu520  
       2022-10-13 10:35:47 +08:00
    分词+es ,基本满足你的需求
    killva4624
        13
    killva4624  
       2022-10-13 10:37:12 +08:00
    不考虑成本的情况下 ES 最快
    samin
        14
    samin  
       2022-10-13 10:39:08 +08:00
    @hyqCrystal 请问这个量的定义是 ? 边界值是多少 ? 以及对机器性能综合考虑,如何取舍,有经验之谈否 ?
    dayeye2006199
        15
    dayeye2006199  
       2022-10-13 10:42:52 +08:00
    qingshuang
        16
    qingshuang  
       2022-10-13 11:09:31 +08:00
    模糊查询真的很烦,用 MYSQL 不走索引,用 ES 的时候因为分词的原因老是查不到被客户投诉。
    例如客户某个商品编码是 CZ101 就老在那问 我搜 Z1 为什么搜不到啊
    这种大家是怎么解决的呢??
    看了下 ES 里的几种解决方案,性能都特别差
    dzdh
        17
    dzdh  
       2022-10-13 11:23:22 +08:00
    轻量级搜索建议 zincsearch ,兼容 es 部分语法
    algalia 小规模用费用还是能承受的
    sadfQED2
        19
    sadfQED2  
       2022-10-13 12:19:31 +08:00 via Android
    @qingshuang es 直接单字符分词
    winglight2016
        20
    winglight2016  
       2022-10-13 12:32:56 +08:00
    要看你的需求是模糊查询,比如“like %xxx%”,还是语义查询,比如“天气怎么样”,还有语言、分词策略,相似度、全文检索的区别。

    如果是整篇文章的部分内容(精确、少量词汇),ES 比较适合。长句子没有什么特别好的办法,即使语义查找,也有句子长度的限制。
    dusu
        21
    dusu  
       2022-10-13 13:03:35 +08:00 via iPhone
    试试 manticoresearch 有惊喜
    @qingshuang
    leegradyllljjjj
        22
    leegradyllljjjj  
       2022-10-13 13:38:19 +08:00   ❤️ 1
    select * from table1 where cloumn1 like '%v 我 50%'
    yjhatfdu2
        23
    yjhatfdu2  
       2022-10-13 18:03:54 +08:00
    @qingshuang postgreSQL ,使用 pg_bigm 索引插件+like
    Jooooooooo
        24
    Jooooooooo  
       2022-10-13 18:51:00 +08:00
    相比起来, es 会好一些.
    Weixiao0725
        26
    Weixiao0725  
    OP
       2022-10-22 00:57:35 +08:00
    @dusu 这个好像真的很不错,试了下他的中文分词,挺好用的。
    dusu
        27
    dusu  
       2022-10-22 10:12:11 +08:00 via iPhone
    开箱即用
    自定义词库的话
    自己编 icudt 文件就行了
    @Weixiao0725
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2888 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:50 · PVG 22:50 · LAX 06:50 · JFK 09:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.