定義MySQL全文搜尋FULLTEXT索引

2019-10-16 22:55:32

在本教學中,您將學習如何定義全文索引,以便在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子句。

例如,可以在範例資料庫(yiibaidb)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索引。