46天前2020-09-11 09:59:17 |    抢沙发  50 
mysql5.7之前要想中文全文索引需要借助第三方工具才可以,比较麻烦。但是5.7之后就自动支持中文全文索引了,还是很不错的,操作也非常简单,只要在my.conf中配置一下分词大小就OK了,当然还得创建全文索引。下面跟随静心一起来看看把

mysql

1,检查mysql版本(必须大于等于5.7):

mysql -V

2,修改配置文件设置分词大小:

/etc/my.cnf
在[mysqld]下添加:
ngram_token_size=2

注:这个2是指定的分词的长度大小;一般2个字比较好。分词的SIZE越小,索引的体积就越大,所以要根据自身情况来设置合适的大小。


3,然后重启你的mysql服务

4,对需要全文索引的字段建立索引:

这里分为两种情况:

4.1以及建立好表,但是还没有创建全文索引,建立全文索引的方法:

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

注:tablename 是要建立索引表的名字 testfulltext 是给索引取的名字 里面的 clumn1,clumn2是要建立索引的字段名。

4.2如果你还没有建立表,那么可以直接在创建表的是加上全文索引:


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;
注:目前很多mysql管理工具创建的全文索引都无法查询出内容,需要手工在终端执行才能真正建立索引,得到数据。



5,全文索引查询语句:


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 也包含数据库但是降低数据库的相关性的记录


6,对索引的删除:

DROP INDEX index_name ON talbe_name
7,查看索引:

show index from tblname;
8,查看查询语句使用了哪些索引:

explain select * from table_name/G;
好了mysql5.7之中文全文索引的配置和查询语法的教程就介绍到这里。

发表评论

暂无评论

登录

忘记密码 ?

切换登录

注册

扫一扫二维码分享