定義MySQL全文搜索FULLTEXT索引

在本教學中,您將學習如何定義全文索引,以便在MySQL中執行各種全文搜索。

在表的列中執行全文搜索之前,必須對其數據進行索引。 每當列的數據更改時,MySQL將重新創建全文索引。在MySQL中,全文索引是一種名稱為FULLTEXT的索引。

MySQL支持對全文搜索啟用列自動建立索引和重新索引數據。 MySQL 5.6或更高版本允許您為數據類型為MyISAM中的CHARVARCHARTEXTInnoDB表類型的列定義全文索引。 請注意,自MySQL5.6版以來,MySQL支持InnoDB表的全文索引。

MySQL允許您在使用CREATE TABLE語句創建表或為現有表使用ALTER TABLECREATE INDEX語句時來定義FULLTEXT索引。

使用CREATE TABLE語句定義FULLTEXT索引

通常,使用CREATE TABLE語句創建新表時,可以為列定義FULLTEXT索引,如下所示:

CREATE TABLE table_name(
 column1 data_type,
        column2 data_type,
        column3 data_type,
 …

PRIMARY_KEY(key_column),
FULLTEXT (column1,column2,..)
);

要創建FULLTEXT索引,請在FULLTEXT關鍵字之後的括弧中放置逗號分隔列的列表。

以下語句創建一個名為posts的新表,該表具有包含post_content列的FULLTEXT索引。

CREATE TABLE posts (
  id int(4) NOT NULL AUTO_INCREMENT,
  title varchar(255) NOT NULL,
  post_content text,
  PRIMARY KEY (id),
  FULLTEXT KEY post_content (post_content)
);

定義現有表的FULLTEXT索引

如果您想要在一個已存在表上定義全文索引,可以使用ALTER TABLE語句或CREATE INDEX語句。

使用ALTER TABLE語句定義FULLTEXT索引

以下語法使用ALTER TABLE語句定義FULLTEXT索引:

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

table_name指定為一列或多列定義FULLTEXT索引的ADD FULLTEXT子句。

例如,可以在示例資料庫(zaixiandb)products表中為productDescriptionproductLine列定義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表的addressLine1addressLine2列創建一個FULLTEXT索引。

CREATE FULLTEXT INDEX address
ON offices(addressLine1,addressLine2)

請注意,對於具有多行的表,首先將數據加載到沒有FULLTEXT索引的表中,然後創建FULLTEXT索引,而不是將大量數據加載到具有現有FULLTEXT索引的表中,先加載數據後創建索引速度更快。

刪除全文搜索列

要刪除FULLTEXT索引,只需使用ALTER TABLE ... DROP INDEX語句刪除索引。 例如,以下語句刪除了offices表中名稱為addressFULLTEXT索引,可使用以下語句 -

ALTER TABLE offices
DROP INDEX address;

在本教學中,我們向您展示了如何定義和刪除支持MySQL全文搜索的FULLTEXT索引。


上一篇: MySQL全文搜索 下一篇: MySQL函數