AnalyticDB for MySQL は、フルテキストインデックス用に AliNLP、IK、Standard、Ngram、Edge_ngram、Pattern の6つの組み込みアナライザを提供しています。各アナライザは異なる形態素解析戦略を使用しており、言語要件、検索パターン (あいまい検索、プレフィックス検索、または完全に一致)、および中国語テキスト処理の必要性に基づいて選択してください。
アナライザの選択
| アナライザ | 最適な用途 | 対応言語 | カスタム辞書 |
|---|---|---|---|
| AliNLP | 中国語および多言語のNLPベースの形態素解析 | 中国語、英語、インドネシア語、マレー語、タイ語、ベトナム語、フランス語、スペイン語 | はい |
| IK | 設定可能な粒度を持つ中国語テキスト | 中国語 | はい |
| Standard | ストップワードフィルタリング付きの英語テキスト | 言語固有のルール | はい |
| Ngram | あいまい部分文字列検索 | 任意 | はい |
| Edge_ngram | プレフィックス検索と自動補完 | 任意 | はい |
| Pattern | 正規表現によるカスタムデリミタベースの形態素解析 | 任意 | いいえ |
クラスターバージョンごとのデフォルトアナライザ:
V3.1.4.15より前のクラスター: AliNLPアナライザ
V3.1.4.15以降のクラスター: IKアナライザ
クラスターのマイナーバージョンを確認するには、「クラスターのマイナーバージョンを表示する方法
アナライザの指定
構文
FULLTEXT INDEX idx_name(`column_name`) [ WITH ANALYZER analyzer_name ] [ WITH DICT tbl_dict_name];パラメーター
| パラメーター | 説明 |
|---|---|
idx_name | フルテキストインデックスの名前。 |
column_name | インデックスを作成するカラムの名前。 |
WITH ANALYZER analyzer_name | 使用するアナライザ。省略するとデフォルトのアナライザが使用されます。 |
WITH DICT tbl_dict_name | 適用するカスタム辞書。詳細については、「フルテキストインデックス用カスタム辞書」をご参照ください。 |
例
次のステートメントは、アナライザごとに1つずつ、6つのフルテキストインデックスを持つテーブルを作成します。
CREATE TABLE `tbl_fulltext_demo` (
`id` int,
`content` varchar,
`content_alinlp` varchar,
`content_ik` varchar,
`content_standard` varchar,
`content_ngram` varchar,
`content_edge_ngram` varchar,
FULLTEXT INDEX fidx_c(`content`), -- Default analyzer
FULLTEXT INDEX fidx_alinlp(`content_alinlp`) WITH ANALYZER alinlp,
FULLTEXT INDEX fidx_ik(`content_ik`) WITH ANALYZER ik,
FULLTEXT INDEX fidx_standard(`content_standard`) WITH ANALYZER standard,
FULLTEXT INDEX fidx_ngram(`content_ngram`) WITH ANALYZER ngram,
FULLTEXT INDEX fidx_edge_ngram(`content_edge_ngram`) WITH ANALYZER edge_ngram,
PRIMARY KEY (`id`)
) DISTRIBUTED BY HASH(id);形態素解析結果のプレビュー
アナライザをコミットする前に、テキストがどのように形態素解析されるかをテストしてください。各アナライザには専用のテスト関数があり、指定された入力文字列のトークンリストを返します。
すべての形態素解析テストクエリに /*+ mode=two_phase*/ をプレフィックスとして追加しないと、正しく実行されません。次の例では、すべてのアナライザで同じ入力 — 'Hello world' — を使用しているため、出力を直接比較できます。
| アナライザ | テスト関数 | 'Hello world' |
|---|---|---|
| AliNLP | fulltext_alinlp_test() | [hello, , world] |
| IK | fulltext_ik_test() | [hello, world, or] |
| Standard | fulltext_standard_test() | [hello, world] |
| Ngram (デフォルトのトークンサイズ: 2) | fulltext_ngram_test() | [he, el, ll, lo, o , w, wo, or, rl, ld] |
| Edge_ngram (最小: 1, 最大: 2) | fulltext_edge_ngram_test() | [h, he] |
使用法:
/*+ mode=two_phase*/ SELECT fulltext_edge_ngram_test('Hello world');[hello, world, or]Patternアナライザは、SQLベースの形態素解析テストをサポートしていません。
AliNLPアナライザ
中国語および多言語テキストに最適です。AliNLPアナライザは、Alibaba Cloud と DAMO アカデミーによって自然言語処理 (NLP) テクノロジーを使用して開発されました。連続した自然言語テキストを意味のあるセグメントに形態素解析し、ユーザー定義のエンティティとストップワード用のカスタム辞書をサポートしています。
対応言語: 中国語、英語、インドネシア語、マレー語、タイ語、ベトナム語、フランス語、スペイン語
英語テキストの形態素解析結果:
/*+ mode=two_phase*/ SELECT fulltext_alinlp_test('Hello world');結果:
[hello, , world]
次の例は、デフォルト設定での形態素解析結果を示しています。
構成パラメーター
| パラメーター | 説明 | デフォルト |
|---|---|---|
FULLTEXT_SPLIT_GRANULARITY | セグメンテーション粒度。2から8までの整数。 | 2 |
FULLTEXT_FILTER_ST_CONVERT_ENABLED | 語幹変換を有効にします (例: men → man、cars → car)。 | false |
FULLTEXT_TOKENIZER_CASE_SENSITIVE | 形態素解析が大文字と小文字を区別するかどうか。 | false |
FULLTEXT_FILTER_PINYIN_ENABLE | ピンイン検索を有効にするかどうかを指定します。有効な値:
| |
FULLTEXT_FILTER_PINYIN_ENABLE | ピンイン検索を有効にするかどうかを指定します。有効な値:
|
IKアナライザ
中国語テキストに最適です。IKアナライザは、オープンソースの軽量な中国語アナライザです。粗粒度と詳細粒度の2つのセグメンテーションモードをサポートし、エンティティとストップワード用のカスタム辞書を受け入れます。
英語テキストの形態素解析結果:
/*+ mode=two_phase*/ SELECT fulltext_ik_test('Hello world');結果:
[hello, world, or]
次の例は、デフォルト設定での形態素解析結果を示しています。
構成パラメーター
| パラメーター | 説明 | デフォルト |
|---|---|---|
CSTORE_IK_SEGMENTER_USE_SMART_ENABLE | セグメンテーションモード。true = 粗粒度 (ik_smartモード); false = 詳細粒度 (ik_max_wordモード)。 | false |
CSTORE_IK_SEGMENTER_LETTER_MIN_LENGTH | 最小セグメント長。2から16までの整数。 | 3 |
CSTORE_IK_SEGMENTER_LETTER_MAX_LENGTH | 最大セグメント長。2から256までの整数。 | 128 |
Standardアナライザ
英語テキストに最適です。Standardアナライザは言語固有のルールを適用します。英語の場合、テキストを小文字に変換し、ストップワードと句読点を削除してから形態素解析します。中国語の場合、テキストを個々の文字に分割します。カスタム辞書をサポートしています。
英語テキストの形態素解析結果:
/*+ mode=two_phase*/ SELECT fulltext_standard_test('Hello world');結果:
[hello, world]
次の例は、デフォルト設定での形態素解析結果を示しています。
構成パラメーター
| パラメーター | 説明 | デフォルト |
|---|---|---|
FULLTEXT_MAX_TOKEN_LENGTH | 最大トークン長。1から1,048,576までの整数。 | 255 |
Ngramアナライザ
あいまい部分文字列検索に最適です。Ngramアナライザは、テキストを固定長のすべての可能な部分文字列に分割するため、部分一致クエリに効果的です。カスタム辞書をサポートしています。
英語テキストの形態素解析結果:
/*+ mode=two_phase*/ SELECT fulltext_ngram_test('Hello world');結果:
[he, el, ll, lo, o , w, wo, or, rl, ld]
次の例は、デフォルト設定での形態素解析結果を示しています。
構成パラメーター
| パラメーター | 説明 | デフォルト |
|---|---|---|
FULLTEXT_NGRAM_TOKEN_SIZE | トークン長。1から8までの整数。 | 2 |
Edge_ngramアナライザ
プレフィックス検索と自動補完 (入力時の検索) に最適です。Edge_ngramアナライザは、増加する長さのプレフィックストークンを生成します。たとえば、h、次に he のように、単語の先頭から一致させるのに理想的です。カスタム辞書をサポートしています。
ヒント: Edge_ngramは、検索語が単語の先頭に表示される場合にうまく機能します。テキスト内の任意の場所でのあいまい部分文字列一致には、代わりにNgramアナライザを使用してください。
英語テキストの形態素解析結果。
/*+ mode=two_phase*/ SELECT fulltext_edge_ngram_test('Hello world');結果:
[h, he]
次の例は、デフォルト設定での形態素解析結果を示しています。
構成パラメーター
| パラメーター | 説明 | デフォルト |
|---|---|---|
FULLTEXT_MIN_GRAM_SIZE | 最小プレフィックス長。1から8までの整数。 | 1 |
FULLTEXT_MAX_GRAM_SIZE | 最大プレフィックス長。1から16までの整数。FULLTEXT_MIN_GRAM_SIZEより大きい必要があります。 | 2 |
Patternアナライザ
カスタムデリミタに最適です。Patternアナライザは、定義した正規表現パターンで分割することによりテキストを形態素解析します。カスタム辞書やSQLベースの形態素解析テストはサポートしていません。
構文
FULLTEXT INDEX fidx_name(`column_name`) WITH ANALYZER pattern_tokenizer("Custom_rule") [ WITH DICT `tbl_dict_name` ];Custom_rule は、分割パターンを定義する正規表現です。
構成パラメーター
| パラメーター | 説明 | デフォルト |
|---|---|---|
FULLTEXT_TOKENIZER_CASE_SENSITIVE | 形態素解析が大文字と小文字を区別するかどうか。 | false |
アナライザ構成の管理
構成パラメーターのクエリ
以下のいずれかの方法を使用して、構成パラメーターの現在の値を確認します。
方法 1: `SHOW adb_config`
デフォルト値と変更された値の両方を返します。
show adb_config key <analyzer_param>;例:
show adb_config key FULLTEXT_NGRAM_TOKEN_SIZE;方法 2: `INFORMATION_SCHEMA` から `SELECT`
変更された値のみを返します。パラメーターがデフォルトから変更されたことがない場合、このクエリはnullを返します。
SELECT `key`, `value`, `update_time`
FROM INFORMATION_SCHEMA.kepler_meta_configs
WHERE key = '<analyzer_param>';例:
SELECT `key`, `value`, `update_time`
FROM INFORMATION_SCHEMA.kepler_meta_configs
WHERE key = 'FULLTEXT_NGRAM_TOKEN_SIZE';構成パラメーターの変更
set adb_config <analyzer_param>=<value>;例:
set adb_config FULLTEXT_NGRAM_TOKEN_SIZE=3;