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

Elasticsearch:IK アナライザープラグイン (analysis-ik) の使用

最終更新日:Jun 16, 2026

IK アナライザープラグイン (analysis-ik) は、Alibaba Cloud Elasticsearch (ES) 向けの中国語テキスト形態素解析拡張機能であり、複数の組み込み辞書タイプを備えています。辞書をカスタマイズまたは拡張して形態素解析の精度を向上させ、Object Storage Service (OSS) から辞書ファイルを動的に読み込んでリモート管理することができます。

背景情報

IK アナライザープラグインは、トークナイザー、辞書ファイル、更新メカニズムの 3 つのコンポーネントで構成されています。

重要

IK アナライザープラグインのバージョンは、Elasticsearch クラスターのバージョンと一致する必要があります。たとえば、クラスターがバージョン 8.17 を使用している場合、IK アナライザープラグインもバージョン 8.17 です。

  • トークナイザー:中国語テキストを意味のあるターム (トークン) に分割し、形態素解析の粒度を決定します。

  • 辞書ファイル:語彙の基盤を提供します。トークナイザーは、これらのファイルに基づいて分割を行い、カスタマイズと拡張をサポートします。

  • 辞書更新方法:コールドアップデートとホットアップデートの両方をサポートし、ビジネス要件に合わせて辞書を柔軟に調整できます。

形態素解析ルール

IK アナライザーは、2 つの形態素解析ルールをサポートしています。

  • ik_max_word: 最も細かい粒度でテキストを分割し、単語ベースのクエリに最適です。

  • ik_smart: テキストをより粗い粒度で分割し、フレーズベースのクエリに最適です。

辞書タイプ

IK アナライザーは、以下の辞書タイプをサポートしています。

辞書タイプ

説明

ファイル要件

サポートされる更新方法

メイン辞書

デフォルトのメイン辞書は main.dic で、270,000 以上の中国語の単語が収録されています。

ES インデックスにメイン辞書を指定すると、クラスターはインデックス作成時に受信データをこの辞書と照合します。一致したタームは、対応するキーワードで検索可能になります。

1行に1単語で、UTF-8 でエンコードされた DIC ファイルとして保存します。

ストップワード辞書

デフォルトのストップワード辞書は stopword.dic で、 atheandatbut などの英語のストップワードが含まれています。

ES インデックスにストップワード辞書を指定すると、クラスターはインデックス作成時に一致したタームを除外します。除外されたタームは転置インデックスに表示されません。

前置詞辞書

デフォルトの前置詞辞書はpreposition.dicで、トークナイザーが前置詞を後続の単語から分割するのに役立つ前置詞が格納されています。

該当なし

コールドアップデート

量詞辞書

デフォルトの数量詞辞書はquantifier.dicで、単位関連用語と数量詞を格納しており、トークナイザが数量詞と名詞の組み合わせを認識するのに役立ちます。

suffix.dic

接尾辞タームを格納し、トークナイザーが接尾辞を含む単語を分割するのに役立ちます。

該当なし

更新はサポートされていません

surname.dic

一般的な中国語の姓を格納し、トークナイザーが名前を認識するのに役立ちます。

辞書更新方法

デフォルトがニーズに合わない場合は、辞書を更新します。IK アナライザーは、以下の方法をサポートしています。

更新方法

説明

シナリオ

コールドアップデート

ES クラスターを再起動して、すべてのノードに辞書の変更を適用します。

システムは、アップロードされたファイルをすべての ES ノードに配信し、再起動します。変更は再起動後に有効になります。

  • デフォルトの辞書ファイル内のコンテンツを置換または削除する場合。

  • 前置詞または量詞辞書ファイルを更新する場合。

ホットアップデート

  • 既存の辞書のコンテンツのみが変更され、ファイル名が変更されない場合、クラスターは再起動せずに新しい辞書を動的に読み込みます。

  • 辞書ファイル名が変更された場合、または辞書ファイルリストが変更された場合 (ファイルの追加、削除、名前変更)、クラスターは再起動して設定を再読み込みします。更新された設定は、再起動の完了後に有効になります。これには、初回のホットアップデート設定が含まれます。

説明

メイン辞書またはストップワード辞書の更新のみをサポートします。

重要

初回のホットアップデート設定時、または辞書ファイルリストの変更時 (辞書ファイルの追加、削除、名前変更) には、クラスターが再起動します。その後、ファイル名が変更されていない既存の辞書ファイルのコンテンツのみを変更する場合は、再起動なしで動的に有効になります。ビジネスへの影響を避けるため、これらの操作はオフピーク時に実行してください。

  • デフォルトの辞書に加えてカスタム辞書ファイルを追加し、メイン辞書またはストップワード辞書を拡張する場合。

  • 既存のメイン辞書またはストップワード辞書ファイル (デフォルトおよび拡張辞書を含む) のコンテンツを変更する場合。

前提条件

  • インスタンスが正常状態であること。 インスタンスのステータスを確認して、詳細ページで確認してください。

    説明

    このトピックでは、Alibaba Cloud ES インスタンスのバージョン 7.10.0 を使用します。 コンソールインターフェイスと機能は、バージョンによって異なる場合があります。

  • (オプション) 辞書を更新する予定がある場合は、まず以下の手順を完了してください。

    • [OSS ファイルのアップロード]を使用して更新する場合: まず OSS バケットを作成し、必要な辞書ファイルをアップロードしてください。

    • [ローカルファイルのアップロード]を使用して更新する場合: 必要な辞書ファイルをローカルマシンに保存してください。

IK 辞書の更新

デフォルトがニーズに合わない場合は、IK 辞書を更新します。続行する前に、更新方法を確認してください。IK 形態素解析がすでに設定されているインデックスの場合、辞書の更新は新しいデータ (新しく追加または更新されたドキュメント) にのみ適用されます。既存のすべてのデータに変更を適用するには、インデックスを再作成してください。

コールドアップデート

コールドアップデートを実行するには、次の手順を実行します。

警告

コールドアップデートはクラスターを再起動します。オフピーク時に実行してください。

  1. インスタンスの詳細ページに移動します。

    1. Alibaba Cloud Elasticsearch コンソールにログオンします。

    2. 左側のナビゲーションペインで、Elasticsearch クラスター をクリックします。

    3. 上部のメニューバーで、リソースグループとリージョンを選択します。

    4. Elasticsearch インスタンスリストで、対象のインスタンス ID をクリックして、詳細ページに移動します。

  2. analysis-ik プラグインのコールドアップデートページに移動します。

    1. 左側のナビゲーションペインで、設定と管理 > プラグイン設定を選択します。

    2. ビルトインプラグインリスト タブで、analysis-ik プラグインを見つけ、アクション 列にある 標準アップグレード をクリックします。

  3. コールドアップデートを実行します。

    1. IK 辞書設定 - コールドパッチ ダイアログボックスで、対象の辞書の横にある 編集 をクリックし、指示に従って必要な辞書ファイルをアップロードしてから、保存 をクリックします。

      辞書ファイルは、以下のいずれかの方法でアップロードできます。

      • [ローカルファイルのアップロード]: image アイコンをクリックするか、指示に従ってローカルファイルをドラッグ & ドロップします。

      • [OSS ファイルのアップロード]: バケット名と辞書ファイル名を入力し、追加 をクリックします。

        • バケットと Alibaba Cloud ES インスタンスは、同じリージョンにある必要があります。

        • OSS 辞書ファイルは自動的に同期されません。ソースファイルが変更された場合は、辞書更新を実行して変更を適用してください。

      説明
      • 各辞書タイプは、DIC 形式のファイルを 1 つのみサポートします。アップロードされたファイルは、元の辞書を置き換えます。

      • 辞書ファイル名は .dic で終わる必要があります。ファイル名には、英字、数字、およびアンダースコアを含めることができ、文字数は 30 文字を超えてはなりません。

      • 辞書をデフォルトのファイルに復元するには、デフォルトのファイルをダウンロードして再アップロードしてください。デフォルトの辞書ファイルは、以下のリンクから入手できます。

    2. リスクの確認を選択し、OK をクリックしてインスタンスを再起動します。

      インスタンスが再起動すると、辞書の更新が完了します。

  4. (オプション) 辞書の更新が有効になったかどうかをテストします。

    1. Kibana コンソールにログオンします。

    2. 左上隅にある image アイコンをクリックし、[管理] > Developer Tools を選択してコードエディターを開きます。

      次のコードを実行して、入力テキスト Chinese character input method for computers を粗粒度にトークン化します。

      説明

      実際には、text の値を辞書の単語に置き換えます。

      GET _analyze
      {
        "analyzer": "ik_smart",
        "text": "计算机汉字输入方法"
      }

      期待される応答は次のとおりです。

      {
        "tokens" : [
          {
            "token" : "计算机",
            "start_offset" : 0,
            "end_offset" : 3,
            "type" : "CN_WORD",
            "position" : 0
          },
          {
            "token" : "汉字输入",
            "start_offset" : 3,
            "end_offset" : 7,
            "type" : "CN_WORD",
            "position" : 1
          },
          {
            "token" : "方法",
            "start_offset" : 7,
            "end_offset" : 9,
            "type" : "CN_WORD",
            "position" : 2
          }
        ]
      }

ホットアップデート

ホットアップデートを実行するには、次の手順を実行します。

説明

ファイル名が変更されていない既存の辞書ファイルのコンテンツのみを変更する場合、クラスターは再起動しません。辞書ファイル名またはファイル数が変更された場合、または初回のホットアップデート設定の場合、クラスターは再起動します。ビジネスへの影響を避けるため、この操作はオフピーク時に実行してください。再起動後、辞書は自動的に有効になります。

  1. インスタンスの詳細ページに移動します。

    1. Alibaba Cloud Elasticsearch コンソールにログオンします。

    2. 左側のナビゲーションペインで、Elasticsearch クラスター をクリックします。

    3. 上部のメニューバーで、リソースグループとリージョンを選択します。

    4. Elasticsearch インスタンスリストで、対象のインスタンス ID をクリックして、詳細ページに移動します。

  2. analysis-ik プラグインのホットアップデートページに移動します。

    1. 左側のナビゲーションペインで、設定と管理 > プラグイン設定を選択します。

    2. ビルトインプラグインリスト タブで、analysis-ik プラグインを見つけ、アクション 列の ローリングアップグレード をクリックします。

  3. ホットアップデートを実行します。

    1. IK 辞書設定 - ホットパッチ ダイアログボックスで、対象の辞書の横にある 編集 をクリックし、指示に従って必要な辞書ファイルをアップロードした後、保存 をクリックします。

      辞書ファイルは、以下のいずれかの方法でアップロードできます。

      • [ローカルファイルのアップロード]: image アイコンをクリックするか、指示に従ってローカルファイルをドラッグ & ドロップします。

      • [OSS ファイルのアップロード]: バケット名と辞書ファイル名を入力し、追加 をクリックします。

        • バケットと Alibaba Cloud ES インスタンスは、同じリージョンにある必要があります。

        • OSS 辞書ファイルは自動的に同期されません。ソースファイルが変更された場合は、辞書更新を実行して変更を適用してください。

      説明
      • 複数の辞書ファイルをアップロードできます。ファイル名は .dic で終わる必要があります。ファイル名には英字、数字、アンダースコアを使用でき、文字数は 30 文字以内にする必要があります。

      • アップロード済みの辞書ファイルを変更するには、その横にある Download アイコンをクリックしてファイルをダウンロードし、編集します。次に、元のファイルを削除し、更新したファイルを再アップロードします。元のファイルを削除した後、Save をクリックします。そうしないと、システムによって同じ名前のファイルがすでに存在すると報告されます。

    2. OK をクリックし、ES ノードが辞書の読み込みを完了するまで待ちます。

      ES ノードは辞書ファイルを自動的に読み込みます。各ノードは、それぞれ異なるタイミングで辞書を読み込みます。すべてのノードが完了するまで待ってください。

  4. (オプション) 辞書の更新が有効になったかどうかをテストします。

    1. Kibana コンソールにログオンします。

    2. 左上隅にある image アイコンをクリックし、[管理] > Developer Tools を選択してコードエディターを開きます。

      次のコードを実行して、入力テキスト Chinese character input method for computers を粗粒度にトークン化します。

      説明

      実際には、text の値を辞書の単語に置き換えます。

      GET _analyze
      {
        "analyzer": "ik_smart",
        "text": "计算机汉字输入方法"
      }

      期待される応答は次のとおりです。

      {
        "tokens" : [
          {
            "token" : "计算机",
            "start_offset" : 0,
            "end_offset" : 3,
            "type" : "CN_WORD",
            "position" : 0
          },
          {
            "token" : "汉字输入",
            "start_offset" : 3,
            "end_offset" : 7,
            "type" : "CN_WORD",
            "position" : 1
          },
          {
            "token" : "方法",
            "start_offset" : 7,
            "end_offset" : 9,
            "type" : "CN_WORD",
            "position" : 2
          }
        ]
      }

IK アナライザープラグインの使用

IK トークナイザーと Pinyin フィルターを使用してテキストを形態素解析します。

  1. ES インスタンスの Kibana 開発ツールページに移動します。

    1. Kibana コンソールにログオンします。

    2. 左上隅の image アイコンをクリックし、[管理] > Developer Tools を選択してコードエディターを開きます。

  2. インデックスを作成し、IK トークナイザーと Pinyin フィルターを設定します。

    次のコマンドを実行し、ik_max_word トークン化と Pinyin フィルターで中国語を Pinyin に変換するカスタム ik_pinyin_analyzer を使用して、ik_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"
          }
        }
      }
    }

    主要なパラメータについて、以下に説明します。

    • ピンインフィルター (filter)

      説明

      使用可能なすべてのパラメータは、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

      true に設定すると、Pinyin が小文字で出力されます。

      remove_duplicated_term

      true に設定すると、“zh,zh” のような重複する用語が削除されます。

    • アナライザー (analyzer):

      パラメータ

      説明

      ik_pinyin_analyzer

      カスタムアナライザーの名前です。

      type

      カスタムアナライザーを定義するには、custom に設定します。

      tokenizer

      ik_max_word に設定すると、テキストが最も細かい粒度で分割されます。

      filter

      my_pinyin Pinyin フィルターを適用するには、my_pinyin に設定します。

      以下の図は、作成に成功した結果を示しています。image

  3. 形態素解析結果を検証します。

    次のコードを実行して、入力テキスト This is a test をトークン化します。

    GET ik_pinyin/_analyze
    {
      "text": "这是个测试",
      "analyzer": "ik_pinyin_analyzer"
    }

    期待される応答は次のとおりです。

    {
      "tokens" : [
        {
          "token" : "zhe",
          "start_offset" : 0,
          "end_offset" : 2,
          "type" : "CN_WORD",
          "position" : 0
        },
        {
          "token" : "这是",
          "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" : "个",
          "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" : "测试",
          "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_max_word トークナイザーを使用すると、fawjh6bcm のような英数字が混在した文字列が、検索で効果的にトークン化されない場合があります。再現率を向上させるには、enable_single_word パラメーターを true に設定します。これにより、混合単語が 1 文字のトークンに分割され、文字レベルのマッチングが可能になります。

以下の例では、enable_single_word を有効にしてカスタムアナライザーを作成します:

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "ik_single_char_analyzer": {
          "type": "custom",
          "tokenizer": "my_ik_tokenizer"
        }
      },
      "tokenizer": {
        "my_ik_tokenizer": {
          "type": "ik_max_word",
          "enable_single_word": true
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "ik_single_char_analyzer"
      }
    }
  }
}

パラメータ

説明

enable_single_word

英数字混合文字列を個々の文字トークンに分割し、モデル番号やシリアルコードのような文字列に対する再現率を向上させるには、true に設定します。デフォルト値は false です。

説明

このパラメータは、Alibaba Cloud Elasticsearch Serverless 環境でもサポートされています。

中英混在検索のための N-gram トークナイザーの使用

中国語テキストと混在する、連結された英語のモデル番号 (jh6bcm など) を検索する場合、IK アナライザーだけでは部分一致に効果的なトークンを生成できない場合があります。このようなシナリオでは、ngram トークナイザーを使用して IK アナライザーを補完または置換します。

N-gram トークナイザーは、テキストを設定可能な長さの連続文字シーケンスに分割し、連結文字列の部分文字列マッチングを可能にします。

以下の例では、N-gram トークナイザーを使用するインデックスを作成します。

PUT my_ngram_index
{
  "settings": {
    "analysis": {
      "tokenizer": {
        "my_ngram_tokenizer": {
          "type": "ngram",
          "min_gram": 2,
          "max_gram": 3,
          "token_chars": ["letter", "digit"]
        }
      },
      "analyzer": {
        "ngram_analyzer": {
          "type": "custom",
          "tokenizer": "my_ngram_tokenizer"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "model_number": {
        "type": "text",
        "analyzer": "ngram_analyzer"
      }
    }
  }
}

パラメータ

説明

min_gram

グラムの最小文字長。デフォルト: 1

max_gram

グラムの最大文字数。デフォルト: 2

token_chars

トークンに含める文字クラス。有効な値:letterdigitwhitespacepunctuationsymbol

N-gram トークナイザーの設定の詳細については、「Ngram tokenizer」をご参照ください。

よくある質問

類義語ファイル内の大文字の単語がエラーを引き起こします。どうすればよいですか?

IK アナライザーは、シノニムファイルを処理する際に大文字と小文字を区別します。シノニムファイルに大文字の単語 (IT など) が含まれている場合、インデックス作成中に解析エラーが発生する可能性があります。

この問題は、以下のいずれかの方法で解決できます。

  • すべての類義語を小文字に変換: 類義語ファイルを編集し、アップロードする前にすべてのエントリを小文字に変換します。

  • アナライザーに lowercase フィルターを追加する: アナライザー設定でシノニムフィルターの前に lowercase フィルターを追加して、シノニムマッチングの前にテキストを小文字に正規化します。 例:

    PUT my_index
    {
      "settings": {
        "analysis": {
          "filter": {
            "my_synonym_filter": {
              "type": "synonym",
              "synonyms_path": "your_synonyms.txt"
            }
          },
          "analyzer": {
            "ik_synonym_analyzer": {
              "type": "custom",
              "tokenizer": "ik_max_word",
              "filter": ["lowercase", "my_synonym_filter"]
            }
          }
        }
      }
    }
    重要

    シノニムマッチングが行われる前にテキストが小文字に変換されるように、フィルターチェーンでは lowercase フィルターをシノニムフィルターの前に配置する必要があります。

関連ドキュメント