Amazon Elasticsearch Service のカスタムパッケージ - Amazon Elasticsearch Service

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Amazon Elasticsearch Service のカスタムパッケージ

Amazon Elasticsearch Service では、クラスターで使用するカスタム辞書ファイル (ストップワードやシノニムなど) をアップロードできます。これらのタイプのファイルの総称は、パッケージです。辞書ファイルは、特定の高頻度の単語を無視するか、「フローズンカスタード」、「ジェラート」、「アイスクリーム」などの用語を同等に扱うように Elasticsearch に指示することで、検索結果を改善します。また、日本語 (kuromoji) 分析プラグインなどのステミングを改善することもできます。

Amazon S3 へのパッケージのアップロード

パッケージをドメインに関連付ける前に、Amazon S3 バケットにアップロードする必要があります。手順については、https://docs.aws.amazon.com/AmazonS3/latest/gsg/upload-objects.html の「S3 オブジェクトのアップロードAmazon Simple Storage Service 入門ガイド」を参照してください。

パッケージに機密情報が含まれている場合は、アップロード時に S3 で管理されたキーによるサーバー側の暗号化を指定します。Amazon ES は、AWS KMS マスターキーを使用して保護する S3 のファイルにアクセスできません。

ファイルをアップロードしたら、その S3 パスを書き留めます。パスの形式は s3://bucket-name/file-path/file-name です。

テスト目的で、次のシノニムファイルを使用できます。synonyms.txt と名前を付けて保存します。

danish, croissant, pastry ice cream, gelato, frozen custard sneaker, tennis shoe, running shoe basketball shoe, hightop

Hunspell 辞書など一部の辞書では、複数のファイルが使用され、ファイルシステム上に独自のディレクトリが必要になります。現時点では、Amazon ES では単一ファイルの辞書のみがサポートされています。

パッケージのインポートと関連付け

コンソールは、パッケージを Amazon ES にインポートし、パッケージをドメインに関連付ける最も簡単な方法です。Amazon S3 からパッケージをインポートすると、Amazon ES はパッケージの独自のコピーを保存し、AES-256 を使用して、Amazon ES で管理されたキーによりそのコピーを自動的に暗号化します。

パッケージをドメインにインポートして関連付けるには (コンソール)

  1. コンソールで、[Amazon Elasticsearch ServicePackages (パッケージ)] を選択します。

  2. [Import] を選択します。

  3. パッケージにわかりやすい名前を付けます。

  4. ファイルへの S3 パスを指定し、[Import (インポート)] を選択します。

  5. [Packages (パッケージ)] 画面に戻ります。

  6. パッケージのステータスが [Available (使用可能)] の場合は、パッケージを選択します。次に、[Associate to a domain (ドメインへの関連付け)] を選択します。

  7. ドメインを選択し、[Associate (関連付け)] を選択します。

  8. ナビゲーションペインで、ドメインを選択し、[Packages (パッケージ)] タブを選択します。

  9. パッケージのステータスが [Available (使用可能)] の場合は、ID をメモします。へのリクエストanalyzers/id をファイルパスとして使用します。Elasticsearch

または、AWS CLI、SDKs、設定 API を使用して、パッケージのインポートと関連付けを行います。詳細については、「AWS CLI Command Reference」および「Amazon Elasticsearch Service 設定 API リファレンス」を参照してください。

Elasticsearch によるカスタムパッケージの使用

ファイルをドメインに関連付けた後は、トークナイザやトークンフィルターの作成時に、synonyms_pathstopwords_pathuser_dictionary などのパラメータで使用できます。正確なパラメータは、オブジェクトによって異なります。synonyms_pathstopwords_path はいくつかのオブジェクトでサポートされますが、user_dictionary は kuromoji プラグイン専用です。次の例では、シノニムファイルを新しいインデックスに追加します。

PUT my-index { "settings": { "index": { "analysis": { "analyzer": { "my_analyzer": { "type": "custom", "tokenizer": "standard", "filter": ["my_filter"] } }, "filter": { "my_filter": { "type": "synonym", "synonyms_path": "analyzers/F111111111", "updateable": true } } } } }, "mappings": { "properties": { "description": { "type": "text", "analyzer": "standard", "search_analyzer": "my_analyzer" } } } }

このリクエストは、標準トークナイザとシノニムトークンフィルターを使用するインデックスのカスタムアナライザーを作成します。

  • トークナイザは、いくつかのルールのセットに基づいて、文字のストリームをトークン (通常は単語) に分割します。最も単純な例は、空白文字に遭遇するたびに、先行する文字をトークンに分割する空白トークナイザです。より複雑な例は標準トークナイザです。これは、一連の文法ベースのルールを使用して多くの言語で動作します。

  • トークンフィルターは、トークンの追加、変更、削除を行います。たとえば、シノニムトークンフィルターは、シノニムリストで単語が見つかったときにトークンを追加します。ストップトークンフィルターは、ストップワードリスト内の単語を検出すると、トークンを削除します。

このリクエストは、マッピングにテキストフィールド (description) を追加し、新しいアナライザーを検索アナライザーとして使用するよう Elasticsearch に指示します。インデックスアナライザーとして標準アナライザーをまだ使用していることがわかります。

最後に、トークンフィルタの "updateable": true 行に注意してください。このフィールドは、インデックスアナライザーではなく、検索アナライザーにのみ適用され、後で検索アナライザーを更新する場合は必須です。

テスト目的のために、インデックスにいくつかのドキュメントを追加します。

POST _bulk { "index": { "_index": "my-index", "_id": "1" } } { "description": "ice cream" } { "index": { "_index": "my-index", "_id": "2" } } { "description": "croissant" } { "index": { "_index": "my-index", "_id": "3" } } { "description": "tennis shoe" } { "index": { "_index": "my-index", "_id": "4" } } { "description": "hightop" }

次に、シノニムを使用して検索します。

GET my-index/_search { "query": { "match": { "description": "gelato" } } }

この場合、Elasticsearch は次の応答を返します。

{ "hits": { "total": { "value": 1, "relation": "eq" }, "max_score": 0.99463606, "hits": [{ "_index": "my-index", "_type": "_doc", "_id": "1", "_score": 0.99463606, "_source": { "description": "ice cream" } }] } }
ヒント

辞書ファイルは、そのサイズに比例して Java ヒープ領域を使用します。たとえば、2 つの GiB 辞書ファイルは、ノード上の 2 つのヒープスペースの GiB を消費する場合があります。大きなファイルを使用する場合は、収容に十分なヒープ領域がノードにあることを確認してください。 メトリクスをモニタリングし、必要に応じてクラスターをスケーリングします。JVMMemoryPressure

カスタムパッケージの更新

新しいバージョンのパッケージを Amazon S3 にアップロードしても、 のパッケージは自動的に更新されませんAmazon Elasticsearch Service。Amazon ES は独自のファイルのコピーを保存するため、新しいバージョンを S3 にアップロードする場合は手動で更新する必要があります。

関連付けられた各ドメインには、ファイルの独自のコピーが保存されます。検索動作を明示的に更新するまで、ドメインは現在のパッケージバージョンを使用し続けます。

パッケージを更新するには (コンソール)

  1. コンソールで、[Amazon Elasticsearch ServicePackages (パッケージ)] を選択します。

  2. パッケージを選択し、[Update package (パッケージの更新)] を選択します。

  3. ファイルへの S3 パスを指定し、[Update package (パッケージの更新)] を選択します。

  4. [Packages (パッケージ)] 画面に戻ります。

  5. パッケージのステータスが [Available (使用可能)] に変わったら、それを選択します。次に、1 つ以上の関連付けられたドメインを選択し、[更新の適用] を選択して、確認します。関連付けのステータスが [Active] に変わるまで待ちます。

  6. 次のステップは、インデックスの設定方法によって異なります。

    • ドメインで Elasticsearch 7.8 以降を実行し、更新可能フィールドが true に設定された検索アナライザーのみを使用する場合、それ以上のアクションを実行する必要はありません。Amazon ES は _opendistro/_refresh_search_analyzer API を使用してインデックスを自動的に更新します。

    • ドメインで以前のバージョンの Elasticsearch が実行されている場合、インデックスアナライザーが使用されている場合、または updateable フィールドを使用しない場合は、「手動インデックス更新」を参照してください。

コンソールが最も簡単な方法ですが、AWS CLI、SDKs、または設定 API を使用して Amazon ES パッケージを更新することもできます。詳細については、「AWS CLI Command Reference」および「Amazon Elasticsearch Service 設定 API リファレンス」を参照してください。

手動インデックス更新

更新されたパッケージを使用するには、次の条件を満たす場合にインデックスを手動で更新する必要があります。

  • ドメインは Elasticsearch 7.7 以前を実行します。

  • カスタムパッケージをインデックスアナライザーとして使用します。

  • カスタムパッケージを検索アナライザーとして使用しますが、更新可能フィールドは含みません。

新しいパッケージファイルでアナライザーを更新するには、次の 2 つのオプションがあります。

  • 更新するインデックスを閉じて開きます。

    POST my-index/_close POST my-index/_open
  • インデックスを再作成します。まず、更新されたシノニムファイル (またはまったく新しいファイル) を使用するインデックスを作成します。

    PUT my-new-index { "settings": { "index": { "analysis": { "analyzer": { "synonym_analyzer": { "type": "custom", "tokenizer": "standard", "filter": ["synonym_filter"] } }, "filter": { "synonym_filter": { "type": "synonym", "synonyms_path": "analyzers/F222222222" } } } } }, "mappings": { "properties": { "description": { "type": "text", "analyzer": "synonym_analyzer" } } } }

    次に、古いインデックスをその新しいインデックスに再作成します。

    POST _reindex { "source": { "index": "my-index" }, "dest": { "index": "my-new-index" } }

    インデックスアナライザーを頻繁に更新する場合は、インデックスエイリアスを使用して、最新のインデックスへの一貫したパスを維持します。

    POST _aliases { "actions": [ { "remove": { "index": "my-index", "alias": "latest-index" } }, { "add": { "index": "my-new-index", "alias": "latest-index" } } ] }

    古いインデックスが必要ない場合は、削除します。

    DELETE my-index

パッケージの関連付け解除と削除

ドメインからパッケージの関連付けを解除すると、新しいインデックスを作成するときにそのファイルを使用できなくなります。ファイルをすでに使用しているインデックスは、そのファイルを引き続き使用できます。

コンソールは、ドメインからパッケージの関連付けを解除し、Amazon ES から削除する最も簡単な方法です。からパッケージを削除しても、Amazon ES の元の場所からは削除 されません。Amazon S3

ドメインからパッケージの関連付けを解除し、Amazon ES から削除するには (コンソール)

  1. https://aws.amazon.com にアクセスし、[Sign In to the Console] を選択します。

  2. [分析] で、[Elasticsearch Service] を選択します。

  3. ナビゲーションペインで、ドメインを選択し、[Packages (パッケージ)] タブを選択します。

  4. パッケージを選択して、[Actions (アクション)] を選択し、[Dissociate (関連付け解除)] を選択します。選択内容を確認します。

  5. パッケージがリストから消えるのを待ちます。ブラウザを更新することが必要な場合があります。

  6. パッケージを他のドメインで使用する場合は、ここで停止します。パッケージの削除を続行するには、ナビゲーションペインで [Packages (パッケージ)] を選択します。

  7. パッケージを選択し、[Delete (削除)] を選択します。

または、AWS CLI、SDKs、設定 API を使用して、パッケージの関連付けを解除および削除します。詳細については、「AWS CLI Command Reference」および「Amazon Elasticsearch Service 設定 API リファレンス」を参照してください。