Mysql的全文索引遇到的坑
Mysql的FULLTEXT索引總結:
1、一張表只能建立一個FULLTEXT索引,建立語句為:
ALTER TABLE tablename ADD FULLTEXT INDEX idx_full_text_all(field1,field2..) with parser ngram;
with parser ngram :是指定中文分詞器外掛
2、搜尋語句
select * from tablename where match(field1,field2...)against('words' IN BOOLEAN MODE)
3、mysql預設是的分詞長度
在沒有使用ngram外掛時通過SHOW VARIABLES LIKE 'ft%'; 來顯式檢視
ft_min_word_len=4, 最短索引字串,修改後需要重新建立索引
重新建立索引命令:repair table tablename quick
ft_max_word_len=84,最長索引字串,修改後需要重新建立索引
4、在使用過程中遇到的問題:
使用了中文分詞器外掛ngram,表的引擎是InnoDB的,單詞java搜不到,其他單詞都沒問題,
(1)、如果改表引擎為MyISAM,表示沒有問題,但是該引擎不支援事物,故不行
(2)、最後查出來原因是:分詞的長度設定不對,當使用ngram中文分詞時,ft_max_word_len就不管用了,得使用其他引數
ngram_token_size這個引數是支援中文分詞的,長度設定成1就可以了。
(3)、Linux上修改mysql配置檔案my.cnf,路徑:/etc/my.cnf 。新增ngram_token_size=1 並重啟mysql,