举个例子: 需求是某数据表名称为some_table, 有四个字段f1、f2、f3、f4里面有中文内容要搜。
既然据说mysql 5.7之后已经内置的ngram中文搜索插件, 那么加入中文索引插件的全文索引的玩法是:
ALTER TABLE some_table ADD FULLTEXT INDEX 索引名(字段1,字段2,字段n) with parser ngram;
这里有2个语句来重建索引维护表, 以重建中文索引为例
ALTER TABLE some_table DROP INDEX 索引名; ALTER TABLE some_table ADD FULLTEXT INDEX 索引名(字段1,字段2,字段n) with parser ngram;
这样一来,sql语句就可以这么写
SELECT xxx from some_table where match (字段1,字段2,字段n) against ('+必须出的关键词1 可选关键词2 -不许出的关键词3' in boolean mode) limit 0, 10;
MySQL报错 1191 - Can't find FULLTEXT index matching the column list, Time: XXXs
有的同学要问了: 为什么在建索引的时候一行要写那么多字段, 分开来写不行吗?
可以改一下不对称的玩法试试, 马上就会发现上面的报错。