时间: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 知识点 怎么 需要 完成