当前位置:Gxlcms > 数据库问题 > Mysql中的全文索引

Mysql中的全文索引

时间:2021-07-01 10:21:17 帮助过:3人阅读

CREATE TABLE productnotes (

  note_id int NOT NULL AUTO_INCREMENT,

  note_text text NULL,

  FULLTEXT(note_text)

) ENGINE=MYISAM;

这里的FULLTEXT(note_text)就开启了全文索引。开启以后我们就能对note_text使用全文索引,并且在增加更新删除行的时候,Mysql会自动帮我们更新索引。

 

全文索引的语法

SELECT note_text

FROM productnotes

WHERE Match(note_text) Against(‘rabbit‘);

注意上面语句的  Match(note_text) Against(‘rabbit‘)  ,Match表示针对note_text列进行搜索,Again括号里面指定的东西作为搜索文本。

那么如果是上面这条语句,Mysql会把所有note_text中含有rabbit的行记录选出来。相当于 LIKE ‘%rabbit%‘  ;

 

但是这里必须谈一谈,文章开头所说到的智能是什么意思,问什么会和LIKE不同?实际上,使用全文索引不仅仅只是把所有满足条件的行记录挑选出来,而且会根据  行中词的数目、唯一词的数目、整个索引中词的总数、包含该词的行的数目 这些因素计算出来一个“等级”。等级越大代表越有可能是我们需要的记录, 然后Mysql会把高等级的行记录先显示出来,亦即把更可能是我们需要的搜索结果先显示出来。这就是智能的涵义。

 

 

 

另外,全文索引还有两种模式:查询扩展和布尔文本搜索。

 

查询扩展

SELECT note_text FROM productnotes

WHERE Match(note_text) Against(‘anvils‘ WITH QUERY EXPANSION) ;

开启了查询扩展,Mysql会返回更多的有可能是我们需要的结果,顾名思义“扩展”嘛。此时Mysql会对数据和索引做两次扫描来完成搜索,步骤如下:

  ①首先,进行基本的全文索引,找出满足条件行。

  ②检查上诉结果,并选出所有有用的词。

  ③Mysql再次进行全文索引,并且 不仅使用原查询词语,而且加上步骤②选出的词。

 

 

布尔文本搜索

SELECT note_text FROM productnotes

WHERE Mtach(note_text) Against(‘heavy -rope* IN BOOLEAN MODE);

开启了布尔模式之后,我们能通过布尔操作符对查询条件做更加精确的要求。比如说上面语句的功能就是:匹配包含heavy但不包含任意以rope开始的词的行。

技术图片

 

 

 

到这里,全文索引的基础知识就这些了,更具体的或者原理还是看书吧。

Mysql中的全文索引

标签:针对   rod   删除行   建表   style   知识点   怎么   需要   完成   

人气教程排行