全文搜索

来源:互联网 发布:淘宝联盟怎么注册不了 编辑:程序博客网 时间:2024/04/25 09:23
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
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:0

mysql>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子句中时(参看上面的例子),返回的记录行被自动地以相关性从高到底的次序排序。相关性值是非负的浮点数字。零相关性意味着不相似。相关性的计算是基于:词在记录行中的数目、在行中唯一词的数目、在集中词的全部数目和包含一个特殊词的文档(记录行)的数目。1<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>