4.1.0中文参考手册---6.8MySQL全文搜索
2008-04-30 09:00
281 查看
MySQL4.1.0中文参考手册---犬犬(心帆)翻译MySQLReferenceManualforversion4.1.0-alpha.
6.8MySQL全文搜索
到3.23.23时,MySQL开始支持全文索引和搜索。全文索引在MySQL中是一个FULLTEXT类型索引。FULLTEXT索引用于MyISAM表,可以在CREATETABLE时或之后使用ALTERTABLE或CREATEINDEX在CHAR、VARCHAR或TEXT列上创建。对于大的,将数据装载到一个没有FULLTEXT索引的表中,然后再使用ALTERTABLE(或CREATEINDEX)创建索引,这将是非常快的。将数据装载到一个已经有FULLTEXT索引的表中,将是非常慢的。
全文搜索通过MATCH()函数完成。
MySQL>CREATETABLEarticles(->idINTUNSIGNEDAUTO_INCREMENTNOTNULLPRIMARYKEY,->titleVARCHAR(200),->bodyTEXT,->FULLTEXT(title,body)->);QueryOK,0rowsaffected(0.00sec)MySQL>INSERTINTOarticlesVALUES->(NULL,'MySQLTutorial','DBMSstandsforDataBase...'),->(NULL,'HowToUseMySQLEfficiently','Afteryouwentthrougha...'),->(NULL,'OptimisingMySQL','Inthistutorialwewillshow...'),->(NULL,'1001MySQLTricks','1.NeverrunMySQLdasroot.2....'),->(NULL,'MySQLvs.YourSQL','Inthefollowingdatabasecomparison...'),->(NULL,'MySQLSecurity','Whenconfiguredproperly,MySQL...');QueryOK,6rowsaffected(0.00sec)Records:6Duplicates:0Warnings:0MySQL>SELECT*FROMarticles->WHEREMATCH(title,body)AGAINST('database');+----+-------------------+------------------------------------------+|id|title|body|+----+-------------------+------------------------------------------+|5|MySQLvs.YourSQL|Inthefollowingdatabasecomparison...||1|MySQLTutorial|DBMSstandsforDataBase...|+----+-------------------+------------------------------------------+2rowsinset(0.00sec)
函数MATCH()对照一个文本集(包含在一个FULLTEXT索引中的一个或多个列的列集)执行一个自然语言搜索一个字符串。搜索字符串做为AGAINST()的参数被给定。搜索以忽略字母大小写的方式执行。对于表中的每个记录行,MATCH()返回一个相关性值。即,在搜索字符串与记录行在MATCH()列表中指定的列的文本之间的相似性尺度。
当MATCH()被使用在一个WHERE子句中时(参看上面的例子),返回的记录行被自动地以相关性从高到底的次序排序。相关性值是非负的浮点数字。零相关性意味着不相似。相关性的计算是基于:词在记录行中的数目、在行中唯一词的数目、在集中词的全部数目和包含一个特殊词的文档(记录行)的数目。
它也可以执行一个逻辑模式的搜索。这在下面的章节中被描述。
前面的例子是函数MATCH()使用上的一些基本说明。记录行以相似性递减的顺序返回。
下一个示例显示如何检索一个明确的相似性值。如果即没有WHERE也没有ORDERBY子句,返回行是不排序的。
MySQL>SELECTid,MATCH(title,body)AGAINST('Tutorial')FROMarticles;+----+-----------------------------------------+|id|MATCH(title,body)AGAINST('Tutorial')|+----+-----------------------------------------+|1|0.64840710366884||2|0||3|0.66266459031789||4|0||5|0||6|0|+----+-----------------------------------------+6rowsinset(0.00sec)
下面的示例更复杂一点。查询返回相似性并依然以相似度递减的次序返回记录行。为了完成这个结果,你应该指定MATCH()两次。这不会引起附加的开销,因为MySQL优化器会注意到两次同样的MATCH()调用,并只调用一次全文搜索代码。1
6.8MySQL全文搜索
到3.23.23时,MySQL开始支持全文索引和搜索。全文索引在MySQL中是一个FULLTEXT类型索引。FULLTEXT索引用于MyISAM表,可以在CREATETABLE时或之后使用ALTERTABLE或CREATEINDEX在CHAR、VARCHAR或TEXT列上创建。对于大的,将数据装载到一个没有FULLTEXT索引的表中,然后再使用ALTERTABLE(或CREATEINDEX)创建索引,这将是非常快的。将数据装载到一个已经有FULLTEXT索引的表中,将是非常慢的。
全文搜索通过MATCH()函数完成。
MySQL>CREATETABLEarticles(->idINTUNSIGNEDAUTO_INCREMENTNOTNULLPRIMARYKEY,->titleVARCHAR(200),->bodyTEXT,->FULLTEXT(title,body)->);QueryOK,0rowsaffected(0.00sec)MySQL>INSERTINTOarticlesVALUES->(NULL,'MySQLTutorial','DBMSstandsforDataBase...'),->(NULL,'HowToUseMySQLEfficiently','Afteryouwentthrougha...'),->(NULL,'OptimisingMySQL','Inthistutorialwewillshow...'),->(NULL,'1001MySQLTricks','1.NeverrunMySQLdasroot.2....'),->(NULL,'MySQLvs.YourSQL','Inthefollowingdatabasecomparison...'),->(NULL,'MySQLSecurity','Whenconfiguredproperly,MySQL...');QueryOK,6rowsaffected(0.00sec)Records:6Duplicates:0Warnings:0MySQL>SELECT*FROMarticles->WHEREMATCH(title,body)AGAINST('database');+----+-------------------+------------------------------------------+|id|title|body|+----+-------------------+------------------------------------------+|5|MySQLvs.YourSQL|Inthefollowingdatabasecomparison...||1|MySQLTutorial|DBMSstandsforDataBase...|+----+-------------------+------------------------------------------+2rowsinset(0.00sec)
函数MATCH()对照一个文本集(包含在一个FULLTEXT索引中的一个或多个列的列集)执行一个自然语言搜索一个字符串。搜索字符串做为AGAINST()的参数被给定。搜索以忽略字母大小写的方式执行。对于表中的每个记录行,MATCH()返回一个相关性值。即,在搜索字符串与记录行在MATCH()列表中指定的列的文本之间的相似性尺度。
当MATCH()被使用在一个WHERE子句中时(参看上面的例子),返回的记录行被自动地以相关性从高到底的次序排序。相关性值是非负的浮点数字。零相关性意味着不相似。相关性的计算是基于:词在记录行中的数目、在行中唯一词的数目、在集中词的全部数目和包含一个特殊词的文档(记录行)的数目。
它也可以执行一个逻辑模式的搜索。这在下面的章节中被描述。
前面的例子是函数MATCH()使用上的一些基本说明。记录行以相似性递减的顺序返回。
下一个示例显示如何检索一个明确的相似性值。如果即没有WHERE也没有ORDERBY子句,返回行是不排序的。
MySQL>SELECTid,MATCH(title,body)AGAINST('Tutorial')FROMarticles;+----+-----------------------------------------+|id|MATCH(title,body)AGAINST('Tutorial')|+----+-----------------------------------------+|1|0.64840710366884||2|0||3|0.66266459031789||4|0||5|0||6|0|+----+-----------------------------------------+6rowsinset(0.00sec)
下面的示例更复杂一点。查询返回相似性并依然以相似度递减的次序返回记录行。为了完成这个结果,你应该指定MATCH()两次。这不会引起附加的开销,因为MySQL优化器会注意到两次同样的MATCH()调用,并只调用一次全文搜索代码。1
相关文章推荐
- MySQL 4.1.0 中文参考手册 --- 6.8 MySQL 全文搜索
- MySQL 4.1.0 中文参考手册 --- 6.6 基本的 MySQL 用户实用命令
- 4.1.0中文参考手册---6.3用于SELECT和WHERE子句的函数(2)
- MySQL 4.1.0 中文参考手册 --- 6.5 数据定义: CREATE、DROP、ALTER
- 4.1.0中文参考手册---6.3用于SELECT和WHERE子句的函数(1)
- MySQL 4.1.0 中文参考手册 --- 6.4 数据操纵:SELECT, INSERT, UPDATE, DELETE
- 4.1.0中文参考手册---6.2列类型
- MySQL 4.1.0 中文参考手册 --- 6.3 用于 SELECT 和 WHERE 子句的函数 (2)
- 4.1.0中文参考手册--6.1语言结构
- MySQL 4.1.0 中文参考手册
- MySQL 4.1.0 中文参考手册 --- 6.3 用于 SELECT 和 WHERE 子句的函数 (1)
- 4.1.0中文参考手册---6.9MySQL查询缓存
- 4.1.0中文参考手册译者序
- MySQL 4.1.0 中文参考手册 --- 6.9 MySQL 查询缓存
- MySQL 4.1.0 中文参考手册 --- 6.2 列类型
- 4.1.0中文参考手册---6.6基本的MySQL用户实用命令
- 4.1.0中文参考手册---6.7MySQL事务与锁定命令
- MySQL 4.1.0 中文参考手册 --- 6.4 数据操纵:SELECT, INSERT,
- MySQL 4.1.0 中文参考手册 -- 6.1 语言结构
- 4.1.0中文参考手册---6.5数据定义:CREATE、DROP、ALTER