Natural Language Full-Text Searches in MySQL 5.6
前几天接触了一下MySQL的全文索引及搜索。考虑到只是让用户查询到是否存在相关的关键字,所以选用Natural Language Mode。测试了一下,用户的输入操作,跟Google搜索的比较接近。
关于全文索引的建立,见以下文章:
关于全文索引的查询,以下文章作了一些具体例子,但主要讲解Boolean Mode:
最详细的说明,还是直接看官方文档吧:
使用Natural Language Mode搜索时,需要注意符号。
绝大部分的符号会当成断字符(可以理解为空格),但'(单引号) "(双引号) _(下划线)例外。
'(单引号)会作为字符串开始和结束标志,如果出现在搜索关键字中,需要转义,否则会使SQL语句出错。单引号需要用单引号转义,即使'要改为''。转义后,会当成断字符处理。
"(双引号)用于标记查询的关键字不可分割。例如搜索"apple tree"时,会找到既包含apple,又包含tree的数据记录。值得注意的是,如果在MyISAM引擎中ft_min_word_len(在InnoDB引擎中是innodb_ft_min_token_size)设为3,搜"apple pi"时,只会出现含有apple的数据记录。因为pi少于3个字符,所以会被忽略掉。
_(下划线)作为关键字的一部分处理,下划线连接的前后两部分与下划线本身作为一个关键字处理。例如:搜索apple_tree时,只会搜apple_tree,不会分成apple和tree来搜索。如果要把-(横线)也跟下划线一样处理,那么需要修改MySQL的相关代码(详见官方文档)。