すべてのプロダクト
Search
ドキュメントセンター

OpenSearch:組み込み関数

最終更新日:Jan 17, 2025

関数

l2_distance(embeding_field, "query_embedding_string") :

  • embedding_field: ドキュメントに埋め込む必要があるフィールドの名前。このフィールドは、FLOAT 型の複数値フィールドであり、属性フィールドとして構成されている必要があります。

  • query_embedding_string: クエリ対象のベクター。ベクター値がカンマ(,)で区切られた文字列(例:0.1,0.2,0.3)としてベクターを指定します。

  • 戻り値: ユークリッド距離の二乗。ユークリッド距離の二乗が小さいほど、ドキュメントの関連性が高くなります。次の図は、距離計算式を示しています。

image.svg

説明

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)としてベクターを指定します。

  • 戻り値: 内積距離。内積距離が大きいほど、ドキュメントの関連性が高くなります。次の図は、距離計算式を示しています。

image.svg

説明

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

  1. 上記の例では、タイトルの転置インデックスに対してクエリが実行されます。

  2. virtual_attribute: 変数を指定します。 embedding_score を使用して、フィルタリングフェーズとソートフェーズでベクター値を参照できます。構文の詳細については、「仮想属性句」をご参照ください。

  3. filter: スコアの低いドキュメントをフィルタリングします。このパラメーターは、ベクターベースのクエリの sf パラメーターと同じ機能を備えています。

  4. formula: マージされたベクトルのスコアとテキストのスコアのソート結果。 normalize 関数を使用してスコアを正規化できます。