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

MySQL 的字段怎样做全文检索最合适?

  •  
  •   wangleineo · 2014-08-17 15:17:41 +08:00 · 5077 次点击
    这是一个创建于 3780 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有一个表包含一个很短的中文字符串字段(最多20个汉字)。现在需要对这个字段做全文检索,返回此字段包含关键词的记录,我能想到几种方法:
    1. 用like语句:select * from mytable where field like "%keyword%'. 缺点:效率太低,索引用不上。
    2. 建立FULLTEXT索引,用match() against语句检索。缺点:要求是MyISAM引擎,而且对中文支持不好,需要预先分词。
    3. 将字段中的关键词提取出来,建立一个多对多的关系表:记录-关键词,查询关键词,通过外键找到记录。缺点:关键词表开始时难于建立。
    4. 用高大上的全文检索引擎Lucence、Sphinx等等,感觉有点小题大作。
    各位过来人说说哪个方法最好?
    补充:现在这个表大概10万条记录,将来可能达百万条。
    6 条回复    2014-08-17 22:01:27 +08:00
    ChiChou
        1
    ChiChou  
       2014-08-17 18:21:44 +08:00
    有没有考虑 ElasticSearch ?
    wangleineo
        2
    wangleineo  
    OP
       2014-08-17 18:38:51 +08:00
    @ChiChou ElasticSearch是基于Lucene的吧。我需要索引的文字都非常短(文章标题,十几个字而已,关键词最多出现一次),用全文引擎感觉有点大材小用了。
    ChiChou
        3
    ChiChou  
       2014-08-17 18:40:38 +08:00
    @wangleineo 还以为是整篇文章的全文搜索。如果只是 keyword 的提取,完全可以找一些分词算法和中文词典,提取出关键字单独存放一个字段。
    luckyduck
        4
    luckyduck  
       2014-08-17 19:32:56 +08:00
    Full-text indexes can be used only with InnoDB or MyISAM tables, and can be created only for CHAR, VARCHAR, or TEXT columns.
    这是从MySQL 5.6以后
    em70
        5
    em70  
       2014-08-17 21:53:23 +08:00 via Android
    100万用like也够用了,没必要再搞复杂的
    xxstop
        6
    xxstop  
       2014-08-17 22:01:27 +08:00
    coreseek
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   908 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:51 · PVG 03:51 · LAX 11:51 · JFK 14:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.