OpenSearch のベクトル検索と k-NN

OpenSearch をベクトルデータベースとして使っているなら、DynoTable はインデックスの knn_vector フィールドで k-NN とセマンティック検索を実行します。DynamoDB テーブルと同じベクトル検索です: 文を入力する、ベクトルを貼り付ける、または行を右クリックして類似を検索を選びます。エディタは、保存済みのベクトルをその元になったテキストと同期させます。

DynoTable が検索するのは、インデックスがすでにマッピングしているベクトルフィールドです。knn_vector フィールドの追加や k-NN インデックスの作成は行いません。ドキュメントを書き込む前に、マッピングで定義してください。

検索できるフィールド

DynoTable はインデックスのマッピングからベクトルフィールドを読み取ります。 knn_vector フィールドは、マッピングに dimension が記載され、スペースの種類が l2、cosinesimil、innerproduct のいずれかなら検索できます(k-NN の既定は l2)。

それ以外のベクトルフィールドにもグリッドでベクトルのマークは付きますが、検索には出てきません: スペースが l1、linf、hamming のフィールド、次元の記載がない学習済みモデル由来のフィールド、nested フィールドの下にあるフィールドです。

検索する

検索できるベクトルフィールドを持つインデックスでは、タブの検索ボックスの前にピッカーが付きます。通常の閲覧にはドキュメント、各ベクトルフィールドには Vector: とフィールド名です。フィールドを選ぶと、ベクトルバーが検索ボックスとフィルターに代わります。

  • 意味で検索する。 文を入力します。DynoTable はフィールドにひも付けた埋め込みモデルで文をベクトルに変え、いちばん近いドキュメントを求めます。
  • 生のベクトルを貼り付ける。 検索オプションで、数値を自分で貼り付ける方法に切り替えます。AI の設定は要りません。
  • 類似を検索。 行を右クリックして類似を検索を選ぶと、そのドキュメント自身のベクトルで検索します。ビジュアルモードで使えます。

Top K は返すドキュメントの数を決めます。結果は 1 ページで、さらに読み込むはありません。もっと欲しければ Top K を上げてください。

結果の先頭にはスコアの列が付きます。インデックスでは、スペースの種類にかかわらずスコアが高いほど近いです。OpenSearch が距離をスコアに変換するからです。コサインとユークリッドのスコアが距離で、小さいほうが近い DynamoDB テーブルとは逆です。

空のベクトルボックスで Esc を押すとドキュメントに戻ります。

products-vectors インデックスで PROD001 の類似を検索を実行した結果:ベクトルバーにはそのドキュメント自身の埋め込みが入り、インデックスのドキュメントがスコアの高い順(高いほど近い)に並ぶ。
products-vectors インデックスで PROD001 の類似を検索を実行した結果:ベクトルバーにはそのドキュメント自身の埋め込みが入り、インデックスのドキュメントがスコアの高い順(高いほど近い)に並ぶ。

埋め込みモデルをひも付ける

文での検索には、保存済みのベクトルをどのモデルが作ったかが必要です。ベクトルバーの検索オプション → 埋め込みモデルを開きます:

  • フィールドの次元数を出力する Bedrock の埋め込みモデルを選びます。
  • テキストの元になるソースフィールドを選びます。一覧はインデックスのマッピングから作られます。詳細設定には、同じ設定が {title}: {description} のようなテンプレートとして表示されます。

ひも付けは、そのドメインまたはコレクション上の、そのインデックスの、そのフィールドに属します。別の場所にある同じ名前のインデックスは、独自のひも付けを持ちます。

検索は読み取りなので、ベクトルの貼り付けと類似を検索は無料の読み取り専用プランで使えます。文をベクトルに変えるには Bedrock を呼ぶため、テーブルと同じく有効なプランと、設定での AI のセットアップが必要です。

ベクトルを含むドキュメントを編集する

ドキュメントエディタでは、ドキュメントを読みやすく保つため、ベクトルは 1 行に折りたたまれます。その行か、ガターのベクトルのマークをクリックすると、オプションが開きます:

  • 値を表示で数値を表示し、値を非表示でまた折りたたみます。表示しても編集にはなりません。
  • 生成で、ソースフィールドから今すぐベクトルを作ります。

ソースフィールドが変わったドキュメントを保存すると、DynoTable は新しいテキストを埋め込み、新しいベクトルを同じステージした変更に書き込みます。インデックスのマッピングがまだ読み込まれていなければ、新しいベクトルなしでステージし、エディタがそのことを伝えます。

制限

  • ベクトル検索の結果は現在読み込み済みまたは選択範囲としてのみエクスポートできます。ベクトル検索ではエクスポートにフィルター完全一致は出てきません。
  • インデックスへのインポートは、ファイル内のベクトルをそのまま書き込みます。書き込みながら行を埋め込むことはしません。

更新日