フルテキストインデックスを使用すると、AnalyticDB for MySQL の VARCHAR 型カラムに対して全文検索クエリを実行できます。このページでは、新規テーブルおよび既存テーブルに対するフルテキストインデックスの作成、確認、および削除方法について説明します。
前提条件
作業を開始する前に、以下の要件を満たしていることを確認してください。
AnalyticDB for MySQL クラスターが V3.1.4.9 以降(推奨:V3.1.4.17 以降)で実行されていること
クラスターのバージョンを確認するには、「AnalyticDB for MySQL クラスターのバージョンを確認する方法」をご参照ください。
制限事項
フルテキストインデックスは一度に 1 つのカラムにのみ作成できます。複数のカラムをインデックス化する場合は、各カラムに対して個別の
FULLTEXT文を実行する必要があります。フルテキストインデックスは VARCHAR 型のカラムでのみサポートされます。
仕組み
AnalyticDB for MySQL のフルテキストインデックスは、データの書き込みタイミングによって適用方法が異なります。
新規に書き込まれたデータ — リアルタイムでインデックス化され、追加の手順は不要です。
既存データ — 自動的にインデックス化されません。インデックスを追加した後、
BUILD TABLE ... force=true;を実行して既存の行をインデックス化する必要があります。BUILD タスクが完了するまで、既存データに対するクエリは高速化されません。
テーブル作成時にフルテキストインデックスを作成する
構文
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'ここで index_option は以下のとおりです。
-- アナライザを指定(省略可):
WITH ANALYZER analyzer_name
-- カスタム辞書を指定(省略可):
WITH DICT tbl_dict_nameパラメーター
| パラメーター | 説明 |
|---|---|
table_name | テーブル名。1~127 文字(英数字またはアンダースコア)で、先頭は英字またはアンダースコアである必要があります。異なるデータベースで同じ名前のテーブルを区別するには、db_name.table_name 形式を使用します。 |
column_name | カラム名。1~127 文字(英数字またはアンダースコア)で、先頭は英字またはアンダースコアである必要があります。 |
column_type | カラムのデータの型。少なくとも 1 つのカラムが VARCHAR 型である必要があります。サポートされるデータの型については、「基本的なデータの型」をご参照ください。 |
column_attributes | カラムの属性。詳細については、「CREATE TABLE」をご参照ください。 |
column_constraints | カラムの制約。詳細については、「CREATE TABLE」をご参照ください。 |
FULLTEXT | フルテキストインデックスを宣言します。 |
INDEX|KEY | インデックスのキーワード識別子。INDEX または KEY のいずれかを使用できます。 |
index_name | フルテキストインデックスの名前。 |
analyzer_name | 形態素解析に使用するアナライザ。省略した場合はデフォルトのアナライザが使用されます。利用可能なアナライザについては、「フルテキストインデックス用のアナライザ」をご参照ください。 |
tbl_dict_name | 使用するカスタム辞書。詳細については、「フルテキストインデックス用のカスタム辞書」をご参照ください。 |
例
content カラムにフルテキストインデックスを持つ tbl_fulltext_name という名前のテーブルを作成します。
CREATE TABLE `tbl_fulltext_name` (
`id` int,
`content` varchar,
`keyword` varchar,
FULLTEXT INDEX fidx_c(`content`),
PRIMARY KEY (`id`)
) DISTRIBUTED 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 | | |
+-------------------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+Index_type = FULLTEXT かつ fidx_c のエントリにより、インデックスが正常に作成されたことが確認できます。
既存テーブルにフルテキストインデックスを追加する
構文
ALTER TABLE `table_name` ADD FULLTEXT [INDEX|KEY] index_name (column_name) [index_option]例
以下の手順で、既存テーブルにフルテキストインデックスを追加し、その既存データをインデックス化します。
tbl_fulltext_nameという名前のテーブルを作成します。CREATE TABLE `tbl_fulltext_name` ( `id` int, `content` varchar, `keyword` varchar, FULLTEXT INDEX fidx_c(`content`), PRIMARY KEY (`id`) ) DISTRIBUTED BY HASH(id) INDEX_ALL = 'N';standardアナライザを使用して、keywordカラムにfidx_kという名前のフルテキストインデックスを追加します。アナライザを指定しない場合、デフォルトのアナライザが使用されます。利用可能なアナライザについては、「フルテキストインデックス用のアナライザ」をご参照ください。
ALTER TABLE `tbl_fulltext_name` ADD FULLTEXT INDEX fidx_k(`keyword`) WITH ANALYZER standard;既存の既存データのインデックスをビルドします。ステップ 2 より前に書き込まれた行は、この 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;