すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:フルテキストインデックスのカスタム辞書

最終更新日:Apr 25, 2025

AnalyticDB for MySQL でフルテキストインデックスを作成する際に、エンティティとストップワードを使用して、セグメント化の結果を実際のビジネスシナリオにより適したものにすることができます。 AnalyticDB for MySQL は、エンティティとストップワードを適用するためのカスタム辞書を提供しています。

前提条件

  • カスタム辞書を作成または更新するには、カスタム辞書に対する DDL および DML 権限が必要です。

  • カスタム辞書を使用するには、カスタム辞書に対する SELECT 権限が必要です。

概要

カスタム辞書はテーブルです。テーブルの場合と同じ方法で、カスタム辞書に対して読み取りおよび書き込み操作を実行できます。カスタム辞書に書き込まれたデータはリアルタイムで有効になります。

制限事項

  • カスタム辞書に対して DDL 変更を実行することはできません。

  • カスタム辞書に対して UPDATE または TRUNCATE 操作を実行することはできません。

  • カスタム辞書は、フルテキストインデックスと組み合わせて使用する必要があります。

  • フルテキストインデックスを削除する前に、対応するカスタム辞書を削除する必要があります。

  • クラスターにつき 1 つのカスタム辞書のみ作成できます。複数作成する場合は、テクニカルサポートにお問い合わせください。

  • デフォルトでは、カスタム辞書には最大 10,000 エントリを挿入できます。この上限を変更する場合は、テクニカルサポートにお問い合わせください。

カスタム辞書を作成する

構文

AnalyticDB for MySQL でカスタム辞書を作成するには、次の構文を使用します。

CREATE TABLE [IF NOT EXISTS] table_name (
  `value` VARCHAR NOT NULL COMMENT '列コメント',
  `type` VARCHAR NOT NULL [DEFAULT 'main|stop' COMMENT '列コメント'],
  PRIMARY KEY (`value`,`type`)
) COMMENT 'テーブルコメント'
FULLTEXT_DICT = 'Y',
INDEX_ALL = 'Y|N'

制約

  • カスタム辞書には、value と type の 2 つのフィールドのみを含めることができます。

  • value フィールドと type フィールドは VARCHAR 型であり、空にすることはできません。

  • 辞書のプライマリキーには、value フィールドと type フィールドの両方を含める必要があります。

パラメーター

  • table_name: テーブルの名前。名前は 1 ~ 127 文字で、英字、数字、およびアンダースコア (_) を使用できます。名前は英字またはアンダースコア (_) で始める必要があります。

  • value: 単語の内容を格納するフィールド。フィールド名は value に固定されています。

  • type: 単語のタイプを格納するフィールド。フィールド名は type に固定されています。有効な値:

    • main (デフォルト): 自然言語テキストで特定の意味を持つエンティティを識別します。カスタム辞書に追加されたエンティティはセグメント化されません。例: 一般分野の場所や組織の名前、e コマース分野のブランド、製品、モデル。

    • stop: 不要な単語を除外します。例: SQL 監査ログシナリオの from 単語。

      重要

      ストップワードは、V3.1.4.24 以降の AnalyticDB for MySQL クラスターでのみサポートされています。

      AnalyticDB for MySQL クラスターのマイナーバージョンを表示および更新するには、AnalyticDB for MySQL コンソールにログインし、クラスター情報 ページの 構成情報 セクションに移動します。

  • COMMENT: 列またはテーブルのコメント。

  • FULLTEXT_DICT: テーブルが辞書テーブルかどうかを指定します。Y に設定します。

  • INDEX_ALL: すべての列にインデックスを作成するかどうかを指定します。有効な値:

    • Y: すべての列にインデックスを作成します。テーブルエンジンが XUANWU の場合、デフォルト値は Y です。デフォルト値を使用することをお勧めします。

    • N: プライマリキーのみにインデックスを作成します。テーブルエンジンが XUANWU_V2 の場合、デフォルト値は N です。このパラメーターを明示的に Y に設定する必要があります。設定しない場合、エラーが発生します。

      説明
      • V3.2.2.0 より前の AnalyticDB for MySQL クラスターの場合、テーブルエンジンは XUANWU です。

      • V3.2.2.0 以降の AnalyticDB for MySQL クラスターの場合、SHOW ADB_CONFIG KEY=RC_DDL_ENGINE_REWRITE_XUANWUV2; 文を実行して、RC_DDL_ENGINE_REWRITE_XUANWUV2 パラメーターの値に基づいてエンジンの種類を判断できます。値が true の場合、デフォルトのテーブルエンジンは XUANWU_V2 です。値が false で、テーブルエンジンを明示的に XUANWU_V2 に設定しない場合、デフォルトのテーブルエンジンは XUANWU です。

tbl_dict_name という名前のカスタム辞書テーブルを作成します。

CREATE TABLE tbl_dict_name (
  `value` VARCHAR NOT NULL COMMENT 'エンティティまたはストップワードの値',
  `type` VARCHAR NOT NULL [DEFAULT 'main' COMMENT 'main はエンティティを示し、stop はストップワードを示します。ストップワードは V3.1.4.24 以降でのみサポートされています。'],
  PRIMARY KEY (`value`,`type`)
) COMMENT='辞書テーブル'
FULLTEXT_DICT = 'Y',
INDEX_ALL = 'Y';

カスタム辞書を更新する

カスタム辞書に対して実行された INSERT または DELETE 操作はすぐに有効になります。テーブルに新しく書き込まれたデータは、カスタム辞書の最新の単語を使用してセグメント化されます。

  • and という名前のストップワードを挿入します。

    INSERT INTO `tbl_dict_name` (`value`, `type`) VALUES ('and', 'stop');
  • 単語を削除します。

    DELETE FROM `tbl_dict_name` WHERE `value` = 'and' AND `type` = 'stop';

カスタム辞書を使用する

構文

CREATE TABLE または ALTER TABLE 文を実行してテーブルにフルテキストインデックスを作成する際にカスタム辞書を指定するには、次の構文を使用します。

FULLTEXT INDEX idx_name(`column_name`) [ WITH ANALYZER analyzer_name ] [ WITH DICT tbl_dict_name];

パラメーター

  • idx_name: フルテキストインデックスの名前。

  • column_name: フルテキストインデックスを作成する列の名前。

  • WITH ANALYZER analyzer_name: アナライザ。 AnalyticDB for MySQL はさまざまなアナライザをサポートしています。詳細については、「フルテキストインデックスのアナライザ」をご参照ください。

  • WITH DICT tbl_dict_name: カスタム辞書。

tbl_fulltext_demo テーブルの content という名前の VARCHAR 型の列に、fidx_c という名前のフルテキストインデックスを作成します。組み込みの AliNLP アナライザと、事前に定義された tbl_ext_dict という名前のカスタム辞書を使用します。

ALTER TABLE `tbl_fulltext_demo` 
ADD FULLTEXT INDEX fidx_c(`content`) 
WITH ANALYZER alinlp 
WITH DICT `tbl_ext_dict`;