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() 関数を使用して、ベクトルスコアに基づいて結果をソートできます。
手順:
高度ソートポリシーを作成します。

注意: proxima_score 関数のパラメーターは、ベクトルインデックスの名前です。
[検索テスト] ページで、作成した高度ソートポリシーを参照してテストを実行します。

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