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