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 個の名前空間。名前空間が設定されている場合は、各クエリで名前空間を 1 つ指定する必要があります。 |
|
|
threshold |
float |
最小スコアしきい値。この値を下回るスコアの結果を除外します。 |
|
|
top_n |
uint32 |
返される上位結果の数。 |
|
|
search_params.qc_scan_ratio |
float |
0.01 |
QC インデックスクエリ中にスキャンするドキュメントの割合。スキャンされるドキュメント数 = |
|
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=vector_index:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6&sf=0.8'
// 新バージョン
query=vector_index:'0.1,0.2,0.98,0.6;0.3,0.4,0.98,0.6'&vector_search={"vector_index":{"threshold":0.8}}
top-Nクエリの指定
説明: 上位 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={"vector_index":{"top_n":10}}
ベクトルスコアによる結果のソート
説明: 高度ソート式で proxima_score(index_name) を使用して、ベクトル距離スコアを取得します。
-
index_name:ベクターインデックス名。 -
float 型のベクトル距離スコアを返します。ベクトル検索で返されなかったドキュメントのデフォルトスコアは 10,000 です。
-
例:
proxima_score(your_vector_index)。
手順:
[検索アルゴリズムセンター] > [ソート設定] > [ポリシー設定] へ移動し、[作成] をクリックします。スコープを [デフォルトの高度ソート] に、タイプを [式] に設定します。
-
[検索テスト] ページで、作成した高度ソートポリシーを選択してテストを実行します。
[検索テスト] ページで、second_rank_name を作成した高度ソートポリシーに設定してから、ベクトル検索クエリを実行します。デフォルトポリシーとカスタムポリシーの結果を比較します。結果に SecondRank: expression[proxima_score(your_vector_index)], result[100.000000] と表示された場合、ベクトル距離スコアが有効になっています。
-
デフォルトの距離尺度はユークリッド距離 (l2) です。
-
内積距離 (ip) の場合、スコアが高いほど関連性が高くなります。
-
ユークリッド距離 (l2) の場合、スコアが低いほど関連性が高くなります。
使用制限
-
デフォルトの距離尺度はユークリッド距離 (l2) です。内積距離 (ip) を使用するには、取り込み前にベクトルを正規化する必要があります。
-
ベクターインデックスのフィールドは
DOUBLE_ARRAY型である必要があります。 -
サポートされている次元:64、128、256、および 512。
DOUBLE_ARRAYのフィールドの要素数は、指定された次元と正確に一致する必要があります。 -
クエリベクトル文字列の最大長:エンコード前で 4 KB。1 つのクエリでサポートされるベクターインデックスは、通常最大 2 つです。