Alex的博客

本博客的文章均为原创,是本人从事行业多年来所遇见一些小问题的解决心得,希望可以帮助到大家!



mysql5.7之中文全文索引

终于等到mysql支持中文全文索引了我就不废话了直接上吧原理啥的懒得讲;

首先你必须的保证你的mysql版本在5.7或者以上 用 mysql -V 进行查看


配置分词大小 这个是在mysql配置文件中进行配置的

linux 一般在 /etc/my.cnf

找到:[mysqld]

在下面添加
ngram_token_size=2

这个2是指定的分词的长度大小;一般2个字比较好

分词的SIZE越小,索引的体积就越大,所以要根据自身情况来设置合适的大小。


已经建立好了表进行添加全文索引

alter table tablename add fulltext index testfulltext(clumn1,clumn2) with parser ngram;

tablename 是要建立索引表的名字 testfulltext 是给索引取的名字 里面的 clumn1clumn2是要建立索引的字段名字

新建表的时候直接设置全文索引

CREATE TABLE tablename (
id INTUNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body) WITH PARSER ngram
) ENGINE=InnoDB CHARACTER SET utf8mb4;

查询索引

SELECT * FROM tablename WHERE MATCH (title,body) AGAINST ('关键词' IN NATURAL LANGUAGE MODE); 

上面的意思是查询 tablename表中 title和body字段都包含 关键词 的记录

SELECT * FROM tablename WHERE MATCH (title,body) AGAINST ('+数据库 +管理' IN BOOLEAN MODE);

上面的意思是查询tablename表中 title和body字段既包含数据库 又包含管理的记录

SELECT * FROM tablename WHERE MATCH (title,body) AGAINST ('+数据库 -管理' IN BOOLEAN MODE);

上面的意思是查询tablename表中 title和body字段既只包含数据库 但是不包含管理的记录

SELECT * FROM tablename WHERE MATCH (title,body) AGAINST ('>数据库 +MySQL' INBOOLEAN MODE)

上面的意思是查询tablename表中 title和body字段既包含MySQL 也包含数据库但是降低数据库的相关性的记录


删除索引

DROP INDEX index_name ON talbe_name

查看索引

show index from tblname;

查询使用了哪些索引

explain select * from table_name/G;

浏览150  评论0  Alex于 2017-9-4 10:37
发言