mysql全文索引使用介紹和問題處理

mysql5.6之前的版本InnoDB引擎,不支持全文索引FULLTEXT。Myisam引擎是支持的
字段的數據類型爲 char、varchar、text 及其系列纔可以建全文索引。

創建一張表,本例只是演示,沒做太多的得考慮

CREATE TABLE t_abc  (
  ID varchar(11) PRIMARY KEY,
  PID varchar(11),
  TYPE varchar(255),
  CONTENT text,
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

插入數據,然後查詢結果


給content字段創建索引。

create fulltext index idx_abc_content on t_abc(content);

使用全文索引,全文所有有自己的寫法。使用match好against關鍵字

select t.* from t_abc t where match(content) against ('a')

執行上面的SQL,查看結果,

咦,怎沒結果呢?明明是有符合條件的結果的。但是使用下面的SQL卻能查到

select t.* from t_abc t where match(content) against ('aaaa')

這是什麼原因呢?原來是最小搜索長度 導致的。MySQL 中的全文索引,有兩個變量,最小搜索長度和最大搜索長度,對於長度小於最小搜索長度和大於最大搜索長度的詞語,都不會被索引。通俗點就是說,想對一個詞語使用全文索引搜索,那麼這個詞語的長度必須在以上兩個變量的區間內。查看方法。

 show variables like '%ft%';



可以看到搜索的長度最小是4,最大是84,當然這些是可以配置的。MySQL 的配置文件 /etc/my.cnf,在 [mysqld] 的下面追加以下配置內容即可,配置完需要重啓服務和修復全文索引。修復全文索引的方法:repair table test quick;也可以刪除索引,然後重建。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章