网站建设不完整(网站内容太少),营销网络的建设怎么写,阜阳建设工程质量监督局网站,购物网站开发小结brief
InnoDB存储引擎从MySQL 5.6开始支持全文本搜索。具体来说#xff0c;MySQL使用InnoDB存储引擎的全文本搜索功能称为InnoDB全文本搜索#xff08;InnoDB Full-Text Search#xff09;。InnoDB全文本搜索支持标准的全文本搜索查询语法和多语言分词器#xff0c;因此可…brief
InnoDB存储引擎从MySQL 5.6开始支持全文本搜索。具体来说MySQL使用InnoDB存储引擎的全文本搜索功能称为InnoDB全文本搜索InnoDB Full-Text Search。InnoDB全文本搜索支持标准的全文本搜索查询语法和多语言分词器因此可以处理包括汉字在内的多种字符集。 LIKE关键字它利用通配操作符匹配文本能够查找包含特殊值或部分值的行不管这些值位于列 内什么位置。
使用正则表达式可以编写查找所需行的非常复杂的匹配模式。
但是他们有限制
性能——通配符和正则表达式匹配通常要求MySQL尝试匹配表中所有行而且这些搜索极少使用表索引。因此由于被搜索行数不断增加这些搜索可能非常耗时。明确控制——使用通配符和正则表达式匹配很难而且并不总是能明确地控制匹配什么和不匹配什么。 为了进行全文本搜索必须索引被搜索的列而且要随着数据的改变不断地重新索引。 在索引之后 SELECT可与Match()和Against()一起使用以实际执行搜索。
一般在创建表时启用全文本搜索。 CREATE TABLE语句接受FULLTEXT子句它给出被索引列的一个逗号分隔的列表。
create table productnotes
(
note_id int not NULL auto_increment,
prod_id char(10) not NULL,
note_date datetime not NUll,
note_text text NUll,
primary key(note_id),
fulltext(note_text)
)ENGINEInnoDB;这些列中有一个名为note_text的列为了进行全文本搜索MySQL根据子句FULLTEXT(note_text)的指示对它进行索引。 这里的FULLTEXT索引单个列如果需要也可以指定多个列。 在定义之后 MySQL自动维护该索引。在增加、更新或删除行时索引随之自动更新。
进行全文本搜索
在索引之后使用两个函数Match()和Against()执行全文本搜索 其中Match()指定被搜索的列 Against()指定要使用的搜索表达式。
select note_text from productnotes
where match(note_text) against(rabbit);# 可以试试这句口令
select note_text, match(note_text) against(rabbit) AS rank;Match(note_text)指示MySQL针对指定列进行搜索 Against(‘rabbit’)指定词rabbit作为搜索文本 使用查询扩展
比如你想找出所有提到anvils的注释。只有一个注释包含词anvils但你还想找出可能与你的搜索有关的所有其他行即使它们不包含词 anvils。
这也是查询扩展的一项任务。在使用查询扩展时 MySQL对数据和索引进行两遍扫描来完成搜索
首先进行一个基本的全文本搜索找出与搜索条件匹配的所有行其次 MySQL检查这些匹配行并选择所有有用的词我们将会简要地解释MySQL如何断定什么有用什么无用。再其次 MySQL再次进行全文本搜索这次不仅使用原来的条件而且还使用所有有用的词。
select note_text from productnotes
where match(note_text) against(rabbit with query expansion);布尔文本搜索
即 使 没 有 定 义FULLTEXT索引也可以使用它。但这是一种非常缓慢的操作其性能将随着数据量的增加而降低。
# 此全文本搜索检索包含词rabbit的所有行
select note_text from productnotes
where match(note_text) against(rabbit IN BOLLEAN MODE);# 匹配包含rabbit但不包含任意以rope开始的词的行
select note_text from productnotes
where match(note_text) against(rabbit -rope* IN BOLLEAN MODE);全文本搜索注意事项
在索引全文本数据时短词被忽略且从索引中排除。短词定义为那些具有3个或3个以下字符的词如果需要这个数目可以更改。MySQL带有一个内建的非用词 stopword列表这些词在索引全文本数据时总是被忽略。如果需要可以覆盖这个列表许多词出现的频率很高搜索它们没有用处返回太多的结果。因此 MySQL规定了一条50%规则如果一个词出现在50%以上 的行中则将它作为一个非用词忽略。 50%规则不用于IN BOOLEAN MODE。如果表中的行数少于3行则全文本搜索不返回结果因为每个词或者不出现或者至少出现在50%的行中。忽略词中的单引号。例如 don’t索引为dont。不具有词分隔符包括日语和汉语的语言不能恰当地返回全文本搜索结果。