wangleineo
V2EX  ›  问与答

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

  •  
  •   wangleineo · Aug 17, 2014 · 5854 views
    This topic created in 4462 days ago, the information mentioned may be changed or developed.
    有一个表包含一个很短的中文字符串字段(最多20个汉字)。现在需要对这个字段做全文检索,返回此字段包含关键词的记录,我能想到几种方法:
    1. 用like语句:select * from mytable where field like "%keyword%'. 缺点:效率太低,索引用不上。
    2. 建立FULLTEXT索引,用match() against语句检索。缺点:要求是MyISAM引擎,而且对中文支持不好,需要预先分词。
    3. 将字段中的关键词提取出来,建立一个多对多的关系表:记录-关键词,查询关键词,通过外键找到记录。缺点:关键词表开始时难于建立。
    4. 用高大上的全文检索引擎Lucence、Sphinx等等,感觉有点小题大作。
    各位过来人说说哪个方法最好?
    补充:现在这个表大概10万条记录,将来可能达百万条。
    6 replies  •  2014-08-17 22:01:27 +08:00
    ChiChou
    ChiChou
    Aug 17, 2014
    1
    有没有考虑 ElasticSearch ?
    wangleineo
    wangleineo
    OP
    Aug 17, 2014
    2
    @ChiChou ElasticSearch是基于Lucene的吧。我需要索引的文字都非常短(文章标题,十几个字而已,关键词最多出现一次),用全文引擎感觉有点大材小用了。
    ChiChou
    ChiChou
    Aug 17, 2014
    3
    @wangleineo 还以为是整篇文章的全文搜索。如果只是 keyword 的提取,完全可以找一些分词算法和中文词典,提取出关键字单独存放一个字段。
    luckyduck
    luckyduck
    Aug 17, 2014
    4
    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
    em70
    Aug 17, 2014 via Android
    5
    100万用like也够用了,没必要再搞复杂的
    xxstop
    xxstop
    Aug 17, 2014
    6
    coreseek
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1394 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:13 · PVG 04:13 · LAX 12:13 · JFK 15:13
    ♥ Do have faith in what you're doing.