MySQL全文索引.pptx_第1页
MySQL全文索引.pptx_第2页
MySQL全文索引.pptx_第3页
MySQL全文索引.pptx_第4页
MySQL全文索引.pptx_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MySQL全文索引与搜索,一、注意事项 二、创建索引 三、查询 四、布尔全文搜索 :IN BOOLEAN MODE 修饰语 五、scws中文分词 参考资料: ,内容介绍,注意事项,一、为什么要用全文索引呢? 一般的数据库搜索都是用的SQL的 like 语句,like 语句有时是不能利用索引的,每次查询都是从第一条遍历至最后一条,查询效率极其低下。 全文索引在 MySQL 中是一个 FULLTEXT 类型的索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TE

2、XT 列上创建。 二、全文停止字(禁用字) 三、全文索引中默认搜索的最短词的长度: 修改 my.ini (Linux 下是 f ) , 在 mysqld 后面加入一行 “ft_min_word_len=1”, 然后重启Mysql。 查看: show variables like ft_m%;,创建索引,创建全文索引: mysql CREATE TABLE articles ( - id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,- title VARCHAR(200), - body TEXT, - FULLTEXT (title,bod

3、y) - ); ALTER TABLE table_name ADD FULLTEXT ( column ); CREATE FULLTEXT INDEX index_name ON table_name (column_name); 查看索引: show index from table_name ; 或:,查询(一),全文搜索通过 MATCH() 函数完成 SELECT * FROM articles WHERE MATCH (title,body) AGAINST (database); 注:可以传递不止一个字段用MATCH()来查看只需用逗号来分割字段列表。搜索可以忽略字母大小写。对于

4、表中的每个记录行,MATCH() 返回一个相关性值。即,在搜索字符串与记录行在 MATCH() 列表中指定的列的文本之间的相似性尺度。 当 MATCH() 被使用在一个 WHERE 子句中时 (参看上面的例子),返回的记录行被自动地以相关性从高到底的次序排序。相关性值是非负的浮点数字。零相关性意味着不相似。相关性的计算是基于:词在记录行中的数目、在行中唯一词的数目、在集中词的全部数目和包含一个特殊词的文档(记录行)的数目。,查询(二),前面说的是函数 MATCH() 使用上的一些基本说明。记录行以相似性递减的顺序返回。如果想看到每个记录的相似性如何,只需要返回MATCH()方法作为结果集的一部

5、分,下面这个示例显示如何检索一个明确的相似性值。如果没有 WHERE 子句也没有 ORDER BY 子句,返回行是不排序的。 SELECT id,MATCH (title,body) AGAINST (Tutorial) FROM articles;,查询(三),下面的示例更复杂一点。查询返回相似性并依然以相似度递减的次序返回记录行。为了完成这个结果,你应该指定 MATCH() 两次。这个时候相似度为0的行,也就是不包含这个单词的行就不显示出来了。这不会引起附加的开销,因为 MySQL 优化器会注意到两次同样的 MATCH() 调用,并只调用一次全文搜索代码。 select id,match(

6、title,body) against(Tutorial) from articles where match(title,body) against (Tutorial); 一个出现在许多文件中的单词具有较低的重要性(而且甚至很多单词的重要性为零),原因是在这个特别词库中其语义价值较低。反之,假如这个单词比较少见,那么它会得到一个较高的重要性。然后单词的重要性被组合,从而用来计算该行的相关性。 这项技术最适合同大型词库一起使用 (事实上, 此时它经过仔细的调整 )。对于很小的表,单词分布并不能充分反映它们的语义价值, 而这个模式有时可能会产生奇特的结果。例如, 虽然单词 “MySQL” 出现

7、在文章表中的每一行,但对这个词的搜索可能得不到任何结果:,虽然单词 “MySQL” 出现在文章表中的每一行,但对这个词的搜索可能得不到任何结果: SELECT * FROM articles WHERE MATCH (title,body) AGAINST (MySQL); 这个搜索的结果为空,原因是单词 “MySQL” 出现在至少全文的50%的行中。 因此, 它被列入停止字。 如果遇到这种情况,在查询的时候可以更改查询的条件来进行矫正如: SELECT * FROM articles WHERE MATCH (title,body) AGAINST (MySQL in BOOLEAN mod

8、e);,全文停止字、全文限定条件,全文限定条件 1、全文搜索只适用于 MyISAM 表。 2、全文搜索可以同大多数多字节字符集一起使用。Unicode属于例外情况; 可使用utf8 字符集 , 而非ucs2字符集。 3、诸如汉语和日语这样的表意语言没有自定界符。因此, FULLTEXT分析程序不能确定在这些或其它的这类语言中词的起始和结束的位置。 4、若支持在一个单独表中使用多字符集,则所有 FULLTEXT索引中的列 必须使用同样的字符集和库。 5、MATCH()列列表必须同该表中一些 FULLTEXT索引定义中的列列表完全符合,除非MATCH()在IN BOOLEAN MODE。 6、对A

9、GAINST() 的参数必须是一个常数字符串。 全文停止字 In、not、 but、 go、 as 等等,IN BOOLEAN MODE 修饰语,MySQL 也可以使用 IN BOOLEAN MODE 修饰语来执行一个逻辑全文搜索。 SELECT * FROM articles WHERE MATCH (title,body) AGAINST (+MySQL -YourSQL IN BOOLEAN MODE); 这个查询返回所有包含词 MySQL 的记录行,但是它没有包含词 YourSQL。 布尔全文搜索具有以下特点: 1、它们不使用 50% 域值。 2、它们不会按照相关性渐弱的顺序将行进行分

10、类。你可以从上述问询结果中看到这一点:相关性最高的行是一个包含两个“MySQL” 的行,但它被列在最后的位置,而不是开头位置。 3、即使没有FULLTEXT,它们仍然可以工作,尽管这种方式的搜索执行的速度非常之慢。 4、最小单词长度全文参数和最大单词长度全文参数均适用。 5、停止字适用。,IN BOOLEAN MODE 修饰语,逻辑全文搜索支持下面的操作符: + 一个领头的加号表示,该词必须出现在每个返回的记录行中。 - 一个领头的减号表示,该词必须不出现在每个返回的记录行中。 缺省的 (当既没有加号也没有负号被指定时)词是随意的,但是包含它的记录行将被排列地更高一点。这个模仿没有 IN BO

11、OLEAN MODE 修饰词的 MATCH() . AGAINST() 的行为。 这两个操作符用于改变一个词的相似性值的基值。 操作符则增加它。参看下面的示例。 ( ) 圆括号用于对子表达式中的词分组。 一个领头的否定号的作用象一个否定操作符,引起行相似性的词的基值为负的。它对标记一个噪声词很有用。一个包含这样的词的记录将被排列得低一点,但是不会被完全的排除,因为这样可以使用 - 操作符。 * 一个星号是截断操作符。不想其它的操作符,它应该被追加到一个词后,不加在前面。 短语,被包围在双引号中,只匹配包含这个短语(字面上的,就好像被键入的)的记录行。,IN BOOLEAN MODE 修饰语,这

12、里是一些示例: apple banana 找至少包含上面词中的一个的记录行 +apple +juice . 两个词均在被包含 +apple macintosh . 包含词 “apple”,但是如果同时包含 “macintosh”,它的排列将更高一些 +apple -macintosh . 包含 “apple” 但不包含 “macintosh” +apple +(pie strudel) . 包含 “apple” 和 “pie”,或者包含的是 “apple” 和 “strudel” (以任何次序),但是 “apple pie” 排列得比 “apple strudel” 要高一点 apple* .

13、 包含 “apple”,“apples”,“applesauce” 和 “applet” some words . 可以包含 “some words of wisdom”,但不是 “some noise words”,分词,scws的安装请参考 注意:在安装的时候一定注意,你的项目使用的是什么字符集,安装对应的scws,否则在分词的过程中会出现无法分词的现象。安装后查看phpinfo会开到scws对应的扩展(相应的字符集也可以看到!)php对应的api接口可以参考 根据您当前用的 PHP 版本,下载相应已编译好的 php_scws.dll 扩展库。 目前支持 PHP-4.4.x 和 PHP-5

14、.2.x 系列,下载地址分别为: php-4.4.x: php-5.2.x: php-5.3.x: 将下载后的 php_scws.dll 放到 php 安装目录的 extensions/ 目录中去(通常为:X:/php/extensions/或 X:/php/ext/)。 建立一个本地目录放规则集文件和词典文件,建议使用:C:/program files/scws/etc 4. 从 scws 主页上下载词典文件,解压后将 *.xdb 放到上述目录中 词典系列: ,分词,从 scws 主页上下载规则集文件,解压后将 *.ini 放到第 3 步建立的目录 规则集文件压缩包: 解压后有三个文件分别为 rules.ini rules.utf8.ini rules_cht.utf8.ini 将三件文件拷到第 3 步所述的目录中 修改 php.ini 在 php.ini 的末尾加入以下几行: scws

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论