Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29957120
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Mysql/postgreSQL

2010-06-04 13:15:54

mysql中的全文索引

时间:2010-6-4

全文索引在 MySQL 中是一个 FULLTEXT 类型索引。FULLTEXT 索引用于 MyISAM 表,可以在 CREATE TABLE 时或之后使用 ALTER TABLE CREATE INDEX CHARVARCHAR TEXT 列上创建。对于大的数据库,将数据装载到一个没有 FULLTEXT 索引的表中,然后再使用 ALTER TABLE ( CREATE INDEX) 创建索引,这将是非常快的。将数据装载到一个已经有 FULLTEXT 索引的表中,将是非常慢的。

 

笔记:

1、  全文索引FULLTEXT适用于字符串类型的字段信息。

2、  如果有这种索引再做批量更新速度很慢

3、  只有MYISAM类型的表才支持FULLTEXT全文索引

 

全文搜索通过 MATCH() 函数完成。(要用到全文索引就必须要使用这个函数)

 

建表语句:

mysql> CREATE TABLE articles (
    ->   id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    ->   title VARCHAR(200),
    ->   body TEXT,
    ->   FULLTEXT (title,body)
    -> );

在这里面我们创建了一个全文索引。现在来看一下

mysql> INSERT INTO articles VALUES
    -> (NULL,'MySQL Tutorial', 'DBMS stands for DataBase ...'),
    -> (NULL,'How To Use MySQL Efficiently', 'After you went through a ...'),
    -> (NULL,'Optimising MySQL','In this tutorial we will show ...'),
    -> (NULL,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
    -> (NULL,'MySQL vs. YourSQL', 'In the following database comparison ...'),
    -> (NULL,'MySQL Security', 'When configured properly, MySQL ...');

现在来检索

 

SQL语句1:使用like实现模糊查询

SELECT * FROM art  WHERE body like '%database%';

SQL语句2:使用全文索引

    SELECT * FROM art  WHERE MATCH (title,body) AGAINST ('database');

函数 MATCH() 对照一个文本集(包含在一个 FULLTEXT 索引中的一个或多个列的列集)执行一个自然语言搜索一个字符串。搜索字符串做为 AGAINST() 的参数被给定。搜索以忽略字母大小写的方式执行。对于表中的每个记录行,MATCH() 返回一个相关性值。即,在搜索字符串与记录行在 MATCH() 列表中指定的列的文本之间的相似性尺度。

 

笔记:match() 里面包含了一个或多个列集。它做的是一个自然语言搜索字符串。指定的字符串为AGAINST()

 

MATCH() 被使用在一个 WHERE 子句中时 (参看上面的例子),返回的记录行被自动地以相关性从高到底的次序排序。相关性值是非负的浮点数字。零相关性意味着不相似。相关性的计算是基于:词在记录 行中的数目、在行中唯一词的数目、在集中词的全部数目和包含一个特殊词的文档(记录行)的数目。

 

这种算法与like是不一样的。这是一种相关性的检索

 

 

阅读(953) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~