舉個例子: 需求是某數據表名稱爲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
有的同學要問了: 爲什麽在建索引的時候一行要寫那麽多字段, 分開來寫不行嗎?
可以改一下不對稱的玩法試試, 馬上就會發現上面的報錯。
MySQL全文索引的配置
不管是阿裡雲的還是本地搭建的MySQL, 建議新手在MySQL配置文档當中寫入如下配置:
[mysqld] ft_min_word_len=1 ngram_token_size=1 innodb_ft_min_token_size=1