wangleineo
V2EX  ›  问与答

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

  •  
  •   wangleineo · Aug 17, 2014 · 5559 views
    This topic created in 4307 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
        1
    ChiChou  
       Aug 17, 2014
    有没有考虑 ElasticSearch ?
    wangleineo
        2
    wangleineo  
    OP
       Aug 17, 2014
    @ChiChou ElasticSearch是基于Lucene的吧。我需要索引的文字都非常短(文章标题,十几个字而已,关键词最多出现一次),用全文引擎感觉有点大材小用了。
    ChiChou
        3
    ChiChou  
       Aug 17, 2014
    @wangleineo 还以为是整篇文章的全文搜索。如果只是 keyword 的提取,完全可以找一些分词算法和中文词典,提取出关键字单独存放一个字段。
    luckyduck
        4
    luckyduck  
       Aug 17, 2014
    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  
       Aug 17, 2014 via Android
    100万用like也够用了,没必要再搞复杂的
    xxstop
        6
    xxstop  
       Aug 17, 2014
    coreseek
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4233 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 93c8b4a0 · 55ms · UTC 05:29 · PVG 13:29 · LAX 22:29 · JFK 01:29
    ♥ Do have faith in what you're doing.