为全文搜索创建全文索引

时间:2019-11-20 08:52:21  来源:igfitidea点击:

简介:在本教程中,您将学习如何定义全文索引,以在MySQL中执行各种全文搜索。

在表的列中执行全文搜索之前,必须索引其数据。
每当列的数据更改时,MySQL都会重新创建全文索引。
在MySQL中,全文索引是一种名为FULLTEXT的索引。

MySQL支持为全文搜索启用的列自动建立数据索引和重新索引。
MySQL 5.6或更高版本允许您为MyISAM和InnoDB表类型中数据类型为CHAR,VARCHAR或TEXT的列定义全文索引。

注意,从版本5.6开始,MySQL仅支持InnoDB表的全文本索引。

MySQL允许您在创建表或为现有表创建ALTER TABLE或CREATE INDEX语句时使用CREATE TABLE语句定义FULLTEXT索引。

使用CREATE TABLE语句创建FULLTEXT索引

通常,使用CREATE TABLE语句创建新表时,您可以为列定义FULLTEXT索引,如下所示:

CREATE TABLE table_name(
    column_list,
    ...,
    FULLTEXT (column1,column2,..)
);

若要创建FULLTEXT索引,请在FULLTEXT关键字后的括号中放置一个逗号分隔的列名称列表。

以下语句创建一个名为posts的新表,该表的FULLTEXT索引包括post_content列。

CREATE TABLE posts (
  id INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(255) NOT NULL,
  body TEXT,
  PRIMARY KEY (id),
  FULLTEXT KEY (body )
);

使用ALTER TABLE语句创建FULLTEXT索引

以下语法使用ALTER TABLE语句定义了FULLTEXT索引:

ALTER TABLE table_name  
ADD FULLTEXT(column_name1, column_name2,…)

用这种语法,

  • 首先,在ALTER TABLE关键字之后指定要创建索引的表的名称。

  • 其次,使用ADD FULLTEXT子句为表的一个或多个列定义FULLTEXT索引。

例如,您可以为示例数据库的产品表中的productDescription和productLine列定义FULLTEXT索引,如下所示:

ALTER TABLE products  
ADD FULLTEXT(productDescription,productLine)

使用CREATE INDEX语句创建FULLTEXT索引

您还可以使用CREATE INDEX语句使用以下语法为现有表创建FULLTEXT索引:

CREATE FULLTEXT INDEX index_name
ON table_name(idx_column_name,...)

例如,以下语句为offices表的addressLine1和addressLine2列创建一个FULLTEXT索引:

CREATE FULLTEXT INDEX address
ON offices(addressLine1,addressLine2)

请注意,对于具有许多行的表,将数据首先加载到没有FULLTEXT索引的表中然后再创建FULLTEXT索引要比将大量数据加载到具有现有FULLTEXT索引的表中更快。

删除FULLTEXT索引

要删除FULLTEXT索引,请使用ALTER TABLE DROP INDEX语句。

ALTER TABLE table_name
DROP INDEX index_name;

例如,以下语句从office表中删除地址索引:

ALTER TABLE offices
DROP INDEX address;

在本教程中,您向您展示了如何创建支持MySQL中全文搜索的FULLTEXT索引。