mysql全文检索
以base_person为例,基于InnoDB
1  | CREATE TABLE `base_person` (  | 
创建/删除
- 创建
 
创建表的同时创建全文索引
1  | CREATE TABLE `base_person` (  | 
通过alter方式
1  | alter table base_person add fulltext index ft_base_person (address,domicile,name,phone) WITH PARSER ngram;  | 
通过create方式
1  | create fulltext index ft_base_person on base_person (address,domicile,name,phone) with parser ngram;  | 
- 删除
 
通过alter方式
1  | alter table base_person drop index ft_base_person;  | 
通过drop方式
1  | drop index ft_base_person on base_person;  | 
使用
- 自然语言
 
查出含有黑龙江和138577的记录,默认已排序
1  | SELECT address,domicile,name,phone FROM base_person where match(address,domicile,name,phone) against('黑龙江 138577');  | 
展示关联分值
1  | SELECT address,domicile,name,phone,match(address,domicile,name,phone) against('黑龙江 138577') as score FROM base_person;  | 
查出含有黑龙江和138577的记录和分值,并排序
1  | SELECT address,domicile,name,phone,match(address,domicile,name,phone) against('黑龙江 138577') as score FROM base_person where match(address,domicile,name,phone) against('黑龙江 138577')  | 
- BOOLEAN模式
 
TODO
- explain模式
 
TODO
注意点
https://dev.mysql.com/doc/refman/5.7/en/fulltext-restrictions.html
优化
如果需要搜索单字,就要把ngram_token_size设置为1
通过mysqld
1  | mysqld --ngram_token_size=1  | 
通过my.cnf
1  | [mysqld]  | 
须重建索引

