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

mysql 能不能对中文分词检索?

  •  
  •   zjsxwc ·
    zjsxwc · 2017-06-20 20:34:58 +08:00 · 6642 次点击
    这是一个创建于 2711 天前的主题,其中的信息可能已经有所发展或是发生改变。

    mysql 能不能对中文分词检索? 要对 item 条目表下的 detail 字段检索,like 不能满足需求。。有什么方法能最快解决这问题?

    能不用 sphinx、els 之类的最好

    第 1 条附言  ·  2017-06-21 16:32:34 +08:00
    折腾了 1 天,最后使用 ES 最爽,完美解决需求,谢谢大家
    18 条回复    2020-09-05 15:50:47 +08:00
    yangguoshuai
        1
    yangguoshuai  
       2017-06-20 20:47:55 +08:00
    先分词,然后编码(比如类似 base64 替换几个字符) 然后全文搜索。。
    zjsxwc
        2
    zjsxwc  
    OP
       2017-06-20 21:04:47 +08:00
    看了下 PostgreSQL 原生支持全文检索,我准备把这个表同步到 PostgreSQL 上来检索。。

    https://www.opsdash.com/blog/postgres-full-text-search-golang.html
    mringg
        3
    mringg  
       2017-06-20 21:06:55 +08:00 via iPhone
    可以原生中文分词
    ngram
    mringg
        4
    mringg  
       2017-06-20 21:07:54 +08:00 via iPhone
    很笨拙的算法,但很有用
    zwh8800
        5
    zwh8800  
       2017-06-20 21:11:17 +08:00
    用专业的工具做专业的事,分词搜索还是用 es 吧
    zjsxwc
        6
    zjsxwc  
    OP
       2017-06-20 21:49:35 +08:00
    @zwh8800

    尝试了下 es 的 5 分钟教程,蛮简单的,es 有什么中文分词推荐的?
    leopku
        7
    leopku  
       2017-06-20 23:03:41 +08:00
    @zjsxwc IK

    mmseg 在某些场景表现也不错

    根据你的场景多测试总结
    Hieast
        8
    Hieast  
       2017-06-20 23:27:19 +08:00 via Android
    @zjsxwc 一开始 smartcn 吧
    wdlth
        9
    wdlth  
       2017-06-20 23:31:09 +08:00
    我们是用 Solr 和 ES 来做的,这些更专业,也更好扩展。
    TangMonk
        10
    TangMonk  
       2017-06-20 23:43:41 +08:00 via Android
    @zjsxwc pg 要下插件才支持中文检索
    aqqwiyth
        11
    aqqwiyth  
       2017-06-20 23:45:34 +08:00
    全转成拼音。。。走 fulltext index 逃:)
    PythonAnswer
        12
    PythonAnswer  
       2017-06-21 02:57:14 +08:00 via Android
    pg 能满足个人需求吗?以前折腾过 es 感觉还是麻烦了
    zjsxwc
        13
    zjsxwc  
    OP
       2017-06-21 06:20:26 +08:00 via Android
    原来 mysql 本身就支持中文分词与全文搜索,我就不折腾了。

    https://dev.mysql.com/doc/refman/5.7/en/fulltext-natural-language.html
    dangyuluo
        14
    dangyuluo  
       2017-06-21 06:25:30 +08:00
    上 ES,免费的没看到有更简单的方案的了。
    cstj0505
        15
    cstj0505  
       2017-06-21 08:56:35 +08:00
    @zjsxwc 是的,postgrsql 配合结巴分词非常好用。

    再弄一个自己家的分词词库,美滋滋,不比任何人的差
    reus
        16
    reus  
       2017-06-21 09:26:30 +08:00
    用 pg_trgm 扩展,建 gist 或者 gin 索引也差不多了
    reus
        17
    reus  
       2017-06-21 09:28:00 +08:00
    没看到是中文,那不能用 pg_trgm
    KalaSearch
        18
    KalaSearch  
       2020-09-05 15:50:47 +08:00
    MySQL 和 PG 本身都支持全文索引和分词,分词的方式有直接切 ngram (N 可选,索引会大 N 倍)或者用一些分词的插件。但问题是 MySQL 和 PG 都不是设计用来做搜索的,因此非要强用会比较拧巴。

    而 ES 有不少分词用的插件,比较各种分词的效果(索引分词效果和搜索分词效果)会需要比较多的上下文知识。通常 Analyzer 和 Query analyzer 必须用同样的分词器,但也会造成有的时候某个词就是搜不出来的情况。

    预算允许的话,自荐下我们做的卡拉搜索,啥也不用配置,接上 API 瞬间开搜。速度在我们的 benchmark 上比优化过的 ES 还快 10 倍左右
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3017 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 13:02 · PVG 21:02 · LAX 05:02 · JFK 08:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.