<人力资源>
6.8 MySQL全文搜索
到3.23.23时,MySQL开始支持全文索引和搜索。全文索引在MySQL中是一个<代码>全文> 代码类型索引。<代码>全文代码>索引用于<代码> MyISAM 代码>表,可以在<代码> 代码>创建表时或之后使用<代码> ALTER TABLE 代码>或<代码>创建指数代码>在<代码>字符代码>,<代码> VARCHAR 代码>或<代码> 代码>文本列上创建。对于大的数据库,将数据装载到一个没有<代码>全文代码>索引的表中,然后再使用<代码> ALTER TABLE> 代码(或<代码>创建索引> 代码)创建索引,这将是非常快的。将数据装载到一个已经有<代码>全文代码>索引的表中,将是非常慢的。
全文搜索通过<代码>匹配()代码>函数完成。
mysql>创建表的文章(INT无符号-> id AUTO_INCREMENT NOT NULL主键,->标题VARCHAR(200) ->正文,->全文(标题、主体)->);查询好,影响(0.00秒)mysql> 0行插入文章值-> (NULL,“mysql教程”,“dbMS代表数据库…”),-> (NULL,如何有效地使用mysql,之后经历了…),-> (NULL,“优化mysql”,“在本教程中我们将展示…”),-> (NULL,“1001 mysql技巧”,“1。从不mysqld作为根用户运行。2。……’)-> (NULL,“MySQL和YourSQL”,“在以下数据库比较…”),-> (NULL,“MySQL安全”,“当配置正确,MySQL…”);查询好,6行影响(0.00秒)记录:6副本:0警告:从文章-> 0 mysql> select *匹配(标题、主体)反对(“数据库”);+ - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + | id标题身体| | + - - - + - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | 5 | MySQL和YourSQL |在以下数据库比较…| | 1 | | DBMS代表数据库MySQL教程……| + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 2行组(0.00秒)
函数<代码>匹配()代码>对照一个文本集(包含在一个<代码>全文代码>索引中的一个或多个列的列集)执行一个自然语言搜索一个字符串。搜索字符串做为反对()<代码> 代码>的参数被给定。搜索以忽略字母大小写的方式执行。对于表中的每个记录行,<代码>匹配()代码>返回一个相关性值,即在搜索字符串与记录行在<代码>匹配()代码>列表中指定的列的文本之间的相似性尺度。
当<代码>匹配()代码>被使用在一个<代码>,代码>子句中时(参看上面的例子),返回的记录行被自动地以相关性从高到底的次序排序。相关性值是非负的浮点数字。零相关性意味着不相似相。关性的计算是基于:词在记录行中的数目,在行中唯一词的数目,在集中词的全部数目和包含一个特殊词的文档(记录行)的数目。
它也可以执行一个逻辑模式的搜索。这在下面的章节中被描述。
前面的例子是函数<代码>匹配()代码>使用上的一些基本说明。记录行以相似性递减的顺序返回。
下一个示例显示如何检索一个明确的相似性值。如果即没有<代码>,代码>也没有<代码>,代码>子句,返回行是不排序的。
mysql>选择id匹配(标题、主体)反对(从文章“教程”);+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | + | id匹配(标题、主体)反对(教程)| + - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | 1 | 0.64840710366884 | | 2 | 0 | | 3 | 0.66266459031789 | | 4 | 0 | | 5 | 0 | | 6 | 0 | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + 6行组(0.00秒)
下面的示例更复杂一点。查询返回相似性并依然以相似度递减的次序返回记录行。为了完成这个结果,你应该指定<代码>匹配()代码>两次。这不会引起附加的开销,因为MySQL优化器会注意到两次同样的<代码>匹配()