analysis-ik プラグインは、Alibaba Cloud Elasticsearch (ES) の中国語トークン化拡張機能です。直接使用できる、いくつかの組み込みのデフォルト辞書が含まれています。また、辞書を更新して analysis-ik プラグインのデフォルト辞書をカスタマイズしたり、新しい辞書を追加したりすることもできます。このプロセスにより、トークン化が最適化され、結果がシナリオにより適したものになります。analysis-ik プラグインは、Object Storage Service (OSS) からの辞書ファイルの動的ロードをサポートしており、リモート管理と運用効率の向上を実現します。このトピックでは、analysis-ik プラグインのトークン化ルールと辞書タイプについて説明し、辞書の更新方法とプラグインの使用方法を解説します。
背景情報
analysis-ik プラグインは、トークナイザー、辞書ファイル、辞書更新メカニズムの 3 つの主要コンポーネントで構成されています。
トークナイザー: 中国語のテキストを意味のある単語 (トークン) に分割し、トークン化の粒度を決定します。
辞書ファイル: トークナイザーがトークン化に使用する語彙ベースを提供します。これらのファイルは拡張とカスタマイズをサポートしています。
辞書更新メソッド: コールドアップデートとホットアップデートをサポートしています。これにより、必要に応じて辞書を柔軟に調整し、トークン化がビジネス要件を満たすようにできます。
トークン化ルール
analysis-ik プラグインは、次のトークン化ルールをサポートしています:
ik_max_word: テキストを最も細かい粒度で分割するため、term クエリに適しています。
ik_smart: テキストを粗い粒度で分割するトークナイザーで、フレーズクエリに適しています。
辞書タイプ
次の表に、analysis-ik プラグインでサポートされている辞書タイプを示します。
辞書タイプ | 説明 | 辞書ファイルの要件 | サポートされている更新メソッド |
メイン辞書 | デフォルトの組み込みメイン辞書は ES インデックスを作成するときにメイン辞書を指定すると、クラスターはインデックスに書き込まれたデータをメイン辞書内の単語と照合します。その後、クラスターは一致した単語のインデックスを作成します。対応するキーワードを使用してインデックスを取得できます。 | 1 行に 1 単語、 | |
ストップワード辞書 | デフォルトの組み込みストップワード辞書は ES インデックスを作成するときにストップワード辞書を指定すると、クラスターはインデックスに書き込まれたデータをストップワード辞書内の単語と照合します。一致した単語はフィルターで除外され、転置インデックスには表示されません。 | ||
前置詞辞書 | デフォルトの組み込み前置詞辞書は | 該当なし | |
数量詞辞書 | デフォルトの組み込み数量詞辞書は | ||
suffix.dic | 接尾辞を格納して、トークナイザーが接尾辞付きの単語を分割するのを助けます。 | 該当なし | 更新はサポートされていません。 |
surname.dic | 中国語の姓を格納して、トークナイザーが人名を認識するのを助けます。 |
辞書更新メソッド
デフォルトの辞書がビジネス要件を満たさない場合は、更新できます。analysis-ik プラグインは、次の辞書更新メソッドをサポートしています。
更新メソッド | 説明 | シナリオ |
辞書の変更は、ES クラスターを再起動することで有効になります。このメソッドは、クラスター全体の辞書を更新します。 システムはアップロードされた辞書ファイルを ES ノードに送信し、ノードを再起動してファイルをロードします。再起動後、新しい構成が有効になります。 |
| |
説明 メイン辞書とストップワード辞書のみ変更できます。 |
|
前提条件
インスタンスが正常なステータスであることを確認してください。インスタンスの [基本情報] ページで インスタンスのステータスを表示 できます。
説明このトピックの操作は、Alibaba Cloud ES
7.10.0インスタンスで実証されています。コンソールのインターフェイスとサポートされている機能は、バージョン によって異なる場合があります。実際のコンソールインターフェイスが優先されます。(オプション) 辞書を更新するには、次のステップを完了する必要があります。
[OSS ファイルのアップロード] メソッドを使用して辞書を更新するには、まず OSS バケットを作成 し、必要な辞書ファイルを アップロード する必要があります。
[ローカルファイルのアップロード] メソッドを使用して更新するには、まず必要な辞書ファイルをコンピューターに保存します。
IK 辞書の更新
デフォルトの IK 辞書がビジネス要件を満たさない場合は、更新できます。更新する前に、対応する 更新メソッド をよく理解してください。IK トークン化で構成されたインデックスの場合、更新された辞書は、新しく追加および更新されたデータを含む新しいデータにのみ有効になります。更新をすべてのデータに適用したい場合は、インデックスを再作成する必要があります。
コールドアップデート
IK 辞書でコールドアップデートを実行するには、次の手順に従います:
標準の更新はクラスターの再起動をトリガーします。ビジネスに影響が出ないように、オフピーク時に更新を実行することをお勧めします。
analysis-ikプラグインのコールドアップデートページに移動します。左側のナビゲーションウィンドウで、 を選択します。
ビルトインプラグインリスト タブで、
analysis-ikプラグインを見つけ、[アクション] 列の 標準アップグレード をクリックします。
コールドアップデートを実行します。
[IK 辞書設定 - コールドアップデート] ダイアログボックスで、更新する辞書を見つけて [編集] をクリックします。画面の指示に従って辞書ファイルをアップロードし、[保存] をクリックします。
次のいずれかの方法で辞書ファイルをアップロードできます:
[ローカルファイルのアップロード]:
アイコンをクリックするか、ローカルファイルをドラッグしてアップロードします。[OSS ファイルのアップロード]: バケット名と辞書ファイルの名前を入力します。次に、[追加] をクリックします。
バケットと Alibaba Cloud ES インスタンスは同じリージョンにある必要があります。
OSS 内の辞書ファイルの自動同期はサポートされていません。OSS 内のソース辞書ファイルの内容が変更された場合は、手動で IK 辞書の更新を実行して変更を適用する必要があります。
説明各辞書タイプについて、
DICフォーマットのファイルを 1 つだけアップロードできます。アップロードされたファイルは既存のファイルを置き換えます。ファイル名には
.dic拡張子が必要です。名前は最大 30 文字で、大文字、小文字、数字、アンダースコア (_) を含めることができます。デフォルトの辞書ファイルを復元するには、ファイルをダウンロードして再度アップロードします。デフォルトの辞書ファイルを取得するには、以下をご参照ください:
インスタンスを再起動するには、リスク通知のチェックボックスを選択し、[OK] をクリックします。
ES インスタンスが再起動すると、辞書ファイルが更新されます。
(オプション) 辞書が有効であることを確認します。
左上隅の
アイコンをクリックし、 を選択してコードエディタページを開きます。たとえば、次のコードを実行して、入力テキスト
computer Chinese character input methodを粗い粒度で分割します。説明このコードを使用するときは、
textを辞書の単語に置き換えてください。GET _analyze { "analyzer": "ik_smart", "text": "computer Chinese character input method" }期待される結果は次のとおりです。
{ "tokens" : [ { "token" : "computer", "start_offset" : 0, "end_offset" : 3, "type" : "CN_WORD", "position" : 0 }, { "token" : "Chinese character input", "start_offset" : 3, "end_offset" : 7, "type" : "CN_WORD", "position" : 1 }, { "token" : "method", "start_offset" : 7, "end_offset" : 9, "type" : "CN_WORD", "position" : 2 } ] }
ホットアップデート
IK 辞書でホットアップデートを実行するには、次の手順に従います:
ファイルの内容のみが変更された場合、クラスターの再起動は必要ありません。ファイルの数やファイル名を変更した場合は、クラスターを再起動する必要があります。ビジネスの中断を避けるため、この操作はオフピーク時に実行してください。再起動後、辞書は自動的に有効になります。
analysis-ikプラグインのホットアップデートページに移動します。左側のナビゲーションウィンドウで、 を選択します。
ビルトインプラグインリスト タブの
analysis-ikプラグインの [アクション] 列で、ローリングアップグレード をクリックします。
ホットアップデートを実行します。
[IK 辞書設定 - ホットアップデート] ダイアログボックスで、ターゲット辞書の [編集] をクリックします。画面の指示に従って辞書ファイルをアップロードし、[保存] をクリックします。
次のいずれかの方法で辞書ファイルをアップロードできます:
[ローカルファイルのアップロード]:
アイコンをクリックするか、ローカルファイルをドラッグしてアップロードします。[OSS ファイルのアップロード]: バケット名と辞書ファイルの名前を入力します。次に、[追加] をクリックします。
バケットと Alibaba Cloud ES インスタンスは同じリージョンにある必要があります。
OSS 内の辞書ファイルの自動同期はサポートされていません。OSS 内のソース辞書ファイルの内容が変更された場合は、手動で IK 辞書の更新を実行して変更を適用する必要があります。
説明複数の辞書ファイルをアップロードできます。ファイル拡張子は
.dicである必要があります。ファイル名には、大文字、小文字、数字、アンダースコア (_) を含めることができ、30 文字以下である必要があります。アップロードされた辞書ファイルを変更するには、ファイルの右側にある
アイコンをクリックしてダウンロードし、変更します。次に、元のファイルを削除し、変更したバージョンをアップロードします。元のファイルを削除した後、[保存] をクリックする必要があります。そうしないと、変更したファイルをアップロードしようとすると、同じ名前のファイルが既に存在するというエラーメッセージが表示されます。
[OK] をクリックし、辞書が ES ノードにロードされるのを待ちます。
Alibaba Cloud ES ノードのプラグインは辞書ファイルを自動的にロードできますが、各ノードがファイルを取得するのにかかる時間は異なります。ファイルがロードされると、辞書が有効になります。このプロセスには時間がかかる場合があります。
(オプション) 辞書が有効であることを確認します。
左上隅の
アイコンをクリックし、 を選択してコードエディタページを開きます。たとえば、次のコードを実行して、入力テキスト
computer Chinese character input methodを粗い粒度で分割します。説明このコードを使用するときは、
textを辞書の単語に置き換えてください。GET _analyze { "analyzer": "ik_smart", "text": "computer Chinese character input method" }期待される結果は次のとおりです。
{ "tokens" : [ { "token" : "computer", "start_offset" : 0, "end_offset" : 3, "type" : "CN_WORD", "position" : 0 }, { "token" : "Chinese character input", "start_offset" : 3, "end_offset" : 7, "type" : "CN_WORD", "position" : 1 }, { "token" : "method", "start_offset" : 7, "end_offset" : 9, "type" : "CN_WORD", "position" : 2 } ] }
analysis-ik プラグインの使用
この例では、IK トークナイザーと Pinyin フィルターを使用して指定されたテキストをトークン化する方法を示します。
ES インスタンスの Kibana 開発ツールページに移動します。
左上隅の
アイコンをクリックし、 を選択してコードエディタを開きます。
インデックスを作成し、IK トークナイザーと Pinyin フィルターを構成します。
[開発ツール] ページで、次のコマンドを実行して
ik_pinyinインデックスとik_pinyin_analyzerという名前のカスタムアナライザーを作成します。このアナライザーは、ik_max_wordの詳細なトークン化ルールと Pinyin フィルターを使用して、中国語の単語を Pinyin に変換します。説明Pinyin フィルターは、中国語のトークン化が完了した後に実行されます。最初に中国語のテキストをトークン化し、次にトークン化の結果を Pinyin に変換して出力します。
PUT ik_pinyin { "settings":{ "analysis": { "filter": { "my_pinyin" : { "type" : "pinyin", "keep_separate_first_letter" : false, "keep_full_pinyin" : true, "keep_original" : true, "limit_first_letter_length" : 16, "lowercase" : true, "remove_duplicated_term" : true } }, "analyzer": { "ik_pinyin_analyzer": { "type": "custom", "tokenizer": "ik_max_word", "filter": ["my_pinyin"] } } } }, "mappings":{ "properties":{ "text":{ "type" : "text", "analyzer" : "ik_pinyin_analyzer" } } } }コアパラメーターは次のように説明されます:
Pinyin フィルター (
filter)説明Pinyin 分析プラグインの構成の詳細については、「Pinyin Analysis for Elasticsearch」をご参照ください。
パラメーター
説明
my_pinyin
定義する Pinyin フィルターの名前。
type
Pinyin フィルターを指定するには
pinyinに設定します。keep_separate_first_letter
各文字の最初の文字を保持しないようにするには
falseに設定します。keep_full_pinyin
完全な Pinyin を保持するには
trueに設定します。keep_original
元の入力テキストを保持するには
trueに設定します。limit_first_letter_length
最初の文字の長さを最大 16 文字に制限するには
16に設定します。lowercase
出力 Pinyin に小文字を使用するには
trueに設定します。remove_duplicated_term
重複する term を削除するには
trueに設定します。たとえば、これにより"zh, zh"のような結果を回避できます。アナライザー (
analyzer):パラメーター
説明
ik_pinyin_analyzer
定義するアナライザーの名前。
type
カスタムアナライザーを指定するには
customに設定します。tokenizer
テキストを最も細かい粒度で分割するには
ik_max_wordに設定します。filter
my_pinyinPinyin フィルターを呼び出すにはmy_pinyinに設定します。次の結果が返され、インデックスが正常に作成されたことを示します。

トークン化の結果を確認します。
次のコードを実行して、入力テキスト
This is a testをトークン化できます。GET ik_pinyin/_analyze { "text": "This is a test", "analyzer": "ik_pinyin_analyzer" }期待される結果は次のとおりです。
{ "tokens" : [ { "token" : "zhe", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "This is", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "zs", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "shi", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 1 }, { "token" : "ge", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 2 }, { "token" : "a", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 2 }, { "token" : "g", "start_offset" : 2, "end_offset" : 3, "type" : "CN_CHAR", "position" : 2 }, { "token" : "ce", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 3 }, { "token" : "shi", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 4 }, { "token" : "test", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 4 }, { "token" : "cs", "start_offset" : 3, "end_offset" : 5, "type" : "CN_WORD", "position" : 4 } ] }
リファレンス
IK 辞書のホットアップデート用 API: UpdateHotIkDicts
IK 辞書のコールドアップデート用 API: UpdateDict