関数
l2_distance(embeding_field, "query_embedding_string") :
embedding_field: ドキュメントに埋め込む必要があるフィールドの名前。このフィールドは、FLOAT 型の複数値フィールドであり、属性フィールドとして構成されている必要があります。
query_embedding_string: クエリ対象のベクター。ベクター値がカンマ(,)で区切られた文字列(例:0.1,0.2,0.3)としてベクターを指定します。
戻り値: ユークリッド距離の二乗。ユークリッド距離の二乗が小さいほど、ドキュメントの関連性が高くなります。次の図は、距離計算式を示しています。
embedding_field パラメーターで指定されたフィールドのディメンション数は、query_embedding_string パラメーターで指定されたベクターのディメンション数と同じである必要があります。そうでない場合、返される距離は uint32_t::max() です。
ip_distance(embeding_field, "query_embedding_string"):
embedding_field: ドキュメントに埋め込む必要があるフィールドの名前。このフィールドは、FLOAT 型の複数値フィールドであり、属性フィールドとして構成されている必要があります。
query_embedding_string: クエリ対象のベクター。ベクター値がカンマ(,)で区切られた文字列(例:0.1,0.2,0.3)としてベクターを指定します。
戻り値: 内積距離。内積距離が大きいほど、ドキュメントの関連性が高くなります。次の図は、距離計算式を示しています。
embedding_field パラメーターで指定されたフィールドのディメンション数は、query_embedding_string パラメーターで指定されたベクターのディメンション数と同じである必要があります。そうでない場合、返される距離は 0 です。
使用方法
sort 句
query=user:'1000'&&sort=ip_distance(embeddding,"0.1,0.2,0.3,0.4")
filter 句
query=user:'1000'&&filter=ip_distance(embeddding,"0.1,0.2,0.3,0.4") < 0.4
virtual_attribute
virtual_attribute でこれらの関数を使用することをお勧めします。このようにして、計算されたスコアをフィルタリングとソートに使用できます。
query=title:"OpenSearch"&&virtual_attribute=embedding_score:ip_distance(embeddding,"0.1,0.2,0.3,0.4")&&filter=embedding_score < 0.4&&kvpairs=formula:normalize(embedding_score)*0.3 + normalize(text_relevance(title))*0.7
上記の例では、タイトルの転置インデックスに対してクエリが実行されます。
virtual_attribute: 変数を指定します。 embedding_score を使用して、フィルタリングフェーズとソートフェーズでベクター値を参照できます。構文の詳細については、「仮想属性句」をご参照ください。
filter: スコアの低いドキュメントをフィルタリングします。このパラメーターは、ベクターベースのクエリの sf パラメーターと同じ機能を備えています。
formula: マージされたベクトルのスコアとテキストのスコアのソート結果。 normalize 関数を使用してスコアを正規化できます。