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;也可以删除索引,然后重建。


 

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