全部產品
Search
文件中心

:建立全文索引

更新時間:Jul 06, 2024

本文介紹了使用雲原生資料倉儲AnalyticDB MySQL版進行全文檢索索引建立全文索引的方法。

前提條件

叢集核心版本需為3.1.4.9及以上版本。

說明

使用限制

  • 全文索引僅支援對一列進行設定,如需對多個列建立全文索引,可通過在多個列上單獨建立全文索引實現。

  • 全文索引只支援VARCHAR類型的列。

可見策略

  • AnalyticDB MySQL的全文索引對新寫入的資料即時可見。

  • 歷史資料需要使用BUILD TABLE `表名` force=true;強制建立索引。

建立表時添加全文索引

文法結構

CREATE TABLE [IF NOT EXISTS] table_name
  ({column_name column_type [column_attributes] [ column_constraints ] [COMMENT 'string']
  [FULLTEXT [INDEX|KEY] [index_name] (column_name)] [index_option]} [, ... ]  )
   table_attribute
   [partition_options]
   [AS] query_expression
   COMMENT 'string'

參數說明

參數

說明

table_name

表名。

表名以字母或底線(_)開頭,可包含字母、數字以及底線(_),長度為1~127個字元。支援db_name.table_name格式,區分不同資料庫下相同名字的表。

column_name

列名。

列名以字母或底線(_)開頭,可包含字母、數字以及底線(_),長度為1~127個字元。

column_type

要添加的列的資料類型。至少有一列的資料類型為VARCHAR。

AnalyticDB MySQL版支援的資料類型,請參見基礎資料類型

column_attributes

列屬性。AnalyticDB MySQL版支援的列屬性,詳情請參見CREATE TABLE

column_constraints

列約束條件。AnalyticDB MySQL版支援的列約束,詳情請參見CREATE TABLE

FULLTEXT

定義全文索引。

INDEX|KEY

全文索引的關鍵字標識。INDEX和KEY無差異。

index_name

全文索引名稱。

column_name

全文索引的列。必須是VARCHAR類型的列。

index_option

可指定全文索引的分詞器和自訂字典。

  • WITH ANALYZER analyzer_name:指定全文索引的分詞器。AnalyticDB MySQL版支援的分詞器類型,請參見全文索引的分詞器

  • WITH DICT tbl_dict_name:指定全文索引的自訂字典。AnalyticDB MySQL版自訂字典的詳細資料,請參見全文索引的自訂字典

樣本

建立表tbl_fulltext_name時,為列content設定了全文索引。

CREATE TABLE `tbl_fulltext_name` (
  `id` int,
  `content` varchar,
  `keyword` varchar,
  FULLTEXT INDEX fidx_c(`content`),
  PRIMARY KEY (`id`)
) DISTRIBUTE BY HASH(id);

您可以通過以下語句查看錶的索引。

SHOW index from tbl_fulltext_name;

返回結果如下:

+-------------------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table             | Non_unique | Key_name      | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| tbl_fulltext_name |          0 | PRIMARY       |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| tbl_fulltext_name |          1 | id_0_idx      |            1 | id          | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| tbl_fulltext_name |          1 | keyword_2_idx |            1 | keyword     | A         |           0 |     NULL | NULL   |      | BTREE      |         |               |
| tbl_fulltext_name |          1 | fidx_c        |            1 | content     | A         |           0 |     NULL | NULL   |      | FULLTEXT   |         |               |
+-------------------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

為已存在的表添加全文索引

文法結構

ALTER TABLE `table_name` ADD FULLTEXT [INDEX|KEY] index_name (column_name) [index_option]

參數說明

詳情的參數說明,請參見建立表時添加全文索引

樣本

  1. 建立表tbl_fulltext_name

    CREATE TABLE `tbl_fulltext_name` (
      `id` int,
      `content` varchar,
      `keyword` varchar,
      FULLTEXT INDEX fidx_c(`content`), 
      PRIMARY KEY (`id`)
    ) DISTRIBUTE BY HASH(id) INDEX_ALL = 'N';
  2. 對列keyword添加全文索引,設定全文索引的名稱為fidx_k,同時指定Standard分詞器。

    說明

    不指定分詞器時,將採用預設分詞器。詳情請參見全文索引的分詞器

    ALTER TABLE `tbl_fulltext_name` ADD FULLTEXT INDEX fidx_k(`keyword`) WITH ANALYZER standard;
  3. 如需對歷史資料建立全文索引,請執行下列語句。Build任務結束後索引才會生效,構建全文索引花費的時間和資料量有關係。

    BUILD TABLE `tbl_fulltext_name` force=true;

刪除全文索引

文法結構

ALTER TABLE table_name DROP FULLTEXT INDEX index_name;

樣本

刪除表tbl_fulltext_name中全文索引fidx_k

ALTER TABLE `tbl_fulltext_name` DROP FULLTEXT INDEX fidx_k;