数据库
首页 > 数据库> > 数据库学习----MySQL 全文索引

数据库学习----MySQL 全文索引

作者:互联网

数据库学习----MySQL 全文索引

前言

我们在使用MySQL做模糊匹配的时候往往只能通过几个相连的关键字进行匹配,这种方式MySQL是不会走索引进行搜索的。MySQL 5.6及以上版本给我们提供了一种可以通过更多方式进行匹配的搜索方式(全文索引查询),并且是通过索引搜索数据。大大提高了查询的效率。

索引的建立方式及销毁方式

创建索引

CREATE TABLE table_name ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, author VARCHAR(200), 
title VARCHAR(200), content TEXT(500), FULLTEXT full_index_name (col_name) ) ENGINE=InnoDB;
CREATE FULLTEXT INDEX full_index_name ON table_name(col_name);

删除索引

DROP INDEX full_idx_name ON db_name.table_name;
DROP INDEX full_idx_name ON db_name.table_name;

使用全文索引查询数据

使用自然语言模式查询

MySQL默认的分词方法是所有非字母和数字的特殊符号都是分词符(如果希望对中文进行分词,则可以使用MySQL内置的ngram插件),对于太短的查询则不会出现结果,默认是3个字符

-- 自然语言模式查询(默认)
select
	*
from
	wenan_reptile_official wro
where
	match ( content ,
	tag ) AGAINST ('在哪里 every man');

上面的SQL中match ( content ,tag ) AGAINST ('在哪里 every man'); 则是使用全文索引进行搜索

使用拓展模式查询

拓展模式是经过两次全文索引的结果,

第二次搜索使用第一次搜索的结果,让结果更精确。

-- 拓展模式查询
select
	*
from
	wenan_reptile_official wro
where
	match ( content ,
	tag ) AGAINST ('在哪里 every man' WITH QUERY expansion);

boolean 模式

select
	*
from
	wenan_reptile_official wro
where
	match ( content ,
	tag ) AGAINST ('+在哪里 -every man' IN BOOLEAN MODE);
select
	*
from
	wenan_reptile_official wro
where
	match ( content ,
	tag ) AGAINST ('在哪里 every man' IN BOOLEAN MODE);
select
	*
from
	wenan_reptile_official wro
where
	match ( content ,
	tag ) AGAINST ('在哪里 "every man"@2' IN BOOLEAN MODE);
--	表示every,man 两个词之间的距离在2字节以内
select
	*
from
	wenan_reptile_official wro
where
	match ( content ,
	tag ) AGAINST ('在哪里 >every <man' IN BOOLEAN MODE);
select
	*
from
	wenan_reptile_official wro
where
	match ( content ,
	tag ) AGAINST ('在哪里 ~every man' IN BOOLEAN MODE);
select
	*
from
	wenan_reptile_official wro
where
	match ( content ,
	tag ) AGAINST ('在哪里 every* man' IN BOOLEAN MODE);
select
	*
from
	wenan_reptile_official wro
where
	match ( content ,
	tag ) AGAINST ('"every man"' IN BOOLEAN MODE);

标签:content,name,全文索引,AGAINST,----,tag,every,MySQL,match
来源: https://www.cnblogs.com/bananafish/p/16532116.html