MySql 全文索引(FULLTEXT)

从 MySQL3.23.23 版本开始支持全文索引,是用户能够在不使用模式匹配操作的前提下去搜索单词或者短语。全文索引在 MySQL 中是一个 FULLTEXT 类型索引,但 FULLTEXT 索引只能用于 MyISAM 表,并且只能在 CHARVARCHARTEXT 类型的列上创建,也允许创建在一个或多个数据列上。这是一种特殊的索引,它会把在某张数据表的某个数据列里出现过的所有单词生成一份清单。
创建全文索引与创建其他类型的索引很相似,例如:

创建

为 detail 字段增加全文索引

CREATE TABLE books (
   bookId INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
   bookName VARCHAR (50) NOT NULL ,
   price DOUBLE NOT NULL ,
   detail TEXT NOT NULL ,
   FULLTEXT (detail)
) ENGINE=MyISAM;

查询

虽然创建全文索引非常类似于创建其他类型的索引,但基于全文索引的获取查询却有所不同。当基于全文索引获取数据时,在 SELECT 语句中需要使用 MATCH()AGAINST() 两个特殊的 MySQL 函数。MATCH() 函数负责列举将对它进行搜索的一个或者多个数据列,而 AGAINST() 函数则负责给出搜索字符串。例如,我们需要在数据表 booksdetail 字段中搜索字符串 helloSELECT 语句如下所示:

SELECT `bookName`,`price` FROM books WHERE MATCH(detail) AGAINST('hello');

该查询列出在 detail 字段中出现 hello 的记录,以相关性从高到低的顺序排序。另外,这两个函数除了在 WHERE 子句中应用,还可以放到查询体中。这样,执行时 MySQL 会搜索 books 表中的每一条记录,计算各条记录的相关性,并返回匹配记录的加权分列表。返回的分数越高,相关性就越大。

SELECT MATCH(detail) AGAINST('hello') FROM books;

更多资料

MySQL 之全文索引 - 知乎

讨论数量: 0

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!