引言
在MySQL中,我们经常使用文本搜索功能,比较熟悉的搜索:
(1)使用LIKE关键词,利用通配符匹配文本,如select col1 from table1 where col1 like 'abc%';
(2)使用正则表达式搜索(REGEXP),如select col1 from table1 where col1 regexp '[123]abc';
这两种搜索方式能满足我们大部分的需求,但是,这两种搜索方式也存在几点重要的限制:
- 性能:通配符和正则表达式匹配通常要求MySQL尝试匹配表中的所有的行,因此,随着数据的增加,这些搜索非常耗时。
- 明确控制:这两种搜索方式很难明确控制匹配什么,不匹配什么,如指定一个词必须匹配,另一个词必须不匹配。
- 智能化的结果:通配符搜索和正则表达式匹配仅能返回满足匹配条件的行,但是每个结果的匹配程度等不能体现。
因此,要解决这些问题,我们就需要用到全文本搜索。
在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词。MySQL创建指定列中各词的一个索引,搜索可以针对这些词进行。这样,MySQL可以快速有效的决定哪些词匹配,哪些词不匹配,以及他们匹配的频率,等等。
一、使用全文本搜索
使用全文本搜索时,必须要索引被搜索的列,而且要随着数据的改变不断重新索引,不过不用担心,我们对表列进行设计后,MySQL会自动进行索引和重新索引。
1.启用全文本搜索
在创建表的时候,通过指定FULLTEXT列来启用全文本搜索。如:
create table table1
(
id int not null auto_increment,
name char(20) not null,
dates datetime not null,
texts text null,
primary key

MySQL全文本搜索提供高效能的文本匹配,通过FULLTEXT索引和match() against()函数实现。查询扩展能放宽搜索结果,而布尔文本搜索允许更精细的控制,包括指定要匹配或排除的词。全文本搜索不适用于InnoDB引擎,且短语和高频率词可能被忽略。
最低0.47元/天 解锁文章
1034

被折叠的 条评论
为什么被折叠?



