OpenSearch は、多様かつ複雑なビジネスシナリオに対応するためのベクトル検索機能を提供します。具体的には、教育分野における宿題検索や画像検索などのシナリオでは、ベクトル検索機能とマルチチャネル検索機能を併用することで、検索結果の精度を大幅に向上させることができます。本トピックでは、ベクトルインデックスの構文および注意事項について説明します。
構文
query = vector_index:'vector'&vector_search={"vector_index":{"namespaces":[],"threshold":0.5,"top_n":10,"search_params":{}}}
vector_search パラメーターは任意です。このパラメーターを使用して、ベクトルインデックスのクエリを構成できます。このパラメーターは辞書形式で指定します。キーはクエリ対象のベクトルインデックス名であり、値には具体的なクエリ構成が含まれます。値には、以下の一般的な設定項目を含めることができます:
パラメーター | 型 | デフォルト値 | 説明 |
namespaces | list<string> | 名前空間単位でベクトルインデックスをパーティション分割します。これにより、クエリリクエストをインデックスの特定パーティションに限定できます。名前空間は 10,000 個を超えて使用しないでください。名前空間を構成する場合は、クエリで必ず名前空間を指定する必要があります。 | |
threshold | float | ベクトル取得における最小スコアしきい値です。 | |
top_n | uint32 | ベクトル取得で返す上位 N 件の結果数です。 | |
search_params.qc_scan_ratio | float | 0.01 | QC インデックスクエリ実行時にスキャンするドキュメントの割合です。スキャン対象ドキュメント数 = 全ドキュメント数 × scan_ratio となります。 |
search_params.hnsw_ef | uint32 | 500 | HNSW インデックスクエリ実行時にスキャンするドキュメント数です。値を大きくすると、取得率が向上しますが、処理時間も増加します。 |
vector_search パラメーターは、マルチチャネルリコール シナリオでも有効です。
例:64 ディメンションのベクトルインデックスをクエリする
vector: '0.377796,-0.958450,0.409853,-0.238177,-1.293826,0.356797,-0.295727,0.847301,-1.220337,0.148032,-1.128458,0.903187,0.509352,0.293686,-1.005852,-0.488839,0.888227,-0.555556,-0.658025,0.267552,-0.567601,0.003045,0.591734,-0.515983,-1.316453,-1.462450,0.091946,1.554954,0.384802,0.720498,0.144338,1.217826,0.724039,0.044212,0.571332,-1.425430,0.618965,0.481887,-1.617787,1.505416,-0.683652,1.030900,0.562021,0.162437,0.816546,0.112229,-0.739288,-0.342643,-0.199292,0.508368,-1.384887,-1.842170,0.952622,-1.699499,0.199430,-0.232464,-0.273227,-0.383696,-0.511302,0.005458,1.873572,-0.926169,-0.417587,-0.660156'利用例
最小スコアしきい値の設定
説明: 指定したしきい値より低いスコアを持つベクターを取得結果から除外します。
従来のパラメーター形式: &sf=number
新しいパラメーター形式: vector_search={"vector_index":{"threshold":0.8}}
例:
// 従来バージョン
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&sf=0.8'
// 新しいバージョン
query=index_name:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6'&vector_search={"index_name":{"threshold":0.8}}上位 N 件のクエリの指定
説明: ベクトル検索から返す上位結果の件数を指定します。
従来のパラメーター形式: &n=number
新しいパラメーター形式: vector_search={"vector_index":{"top_n":10}}
例:
// 従来バージョン
query=vector_index:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&n=10'
// 新しいバージョン
query=vector_index:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6'&vector_search={"index_name":{"top_n":10}}ベクタースコアによる結果の並べ替え
説明: 高度ソート式内で proxima_score(index_name) 関数を使用して、ベクトル距離スコアを取得します。
index_name:ベクトルインデックスの名前です。戻り値は、ベクトル距離を表す
float型の値です。ベクトル検索で返されないドキュメントについては、デフォルトスコアとして 10,000 が設定されます。例:
proxima_score(your_vector_index)。
操作手順:
きめ細かいソートポリシーを作成します:

検索テストページで、作成した高度ソートポリシーを選択し、テストを実行します:

システムでは、デフォルトでユークリッド距離 (L2 距離) を使用します。
内積 (ip) 距離では、ベクター スコアが高いほど、ドキュメントの関連性が高いことを示します。
ユークリッド距離 (L2 距離) の場合、ベクター スコアが小さいほど、ドキュメントの関連性が高いことを示します。
注意事項
インデックス構築時におけるベクトル距離のデフォルト方式は、ユークリッド距離 (L2 距離) です。内積 (ip) 距離を使用する場合は、データをエンジンに渡す前にベクターを正規化する必要があります。
ベクトルインデックスに対応するフィールドは、DOUBLE_ARRAY 型である必要があります。
ベクトルトークナイザーは、64、128、256、512 ディメンションをサポートしています。対応する DOUBLE_ARRAY フィールド内の要素数は、指定されたディメンション数と一致している必要があります。
エンコーディング前のベクトルインデックスの最大長は 4 KB です。1 回のクエリでは、最大 2 つのベクトルインデックスをサポートします。