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

:tag_match

最終更新日:Dec 28, 2024

機能関数と特徴関数の両方として使用できる関数

特定の関数は、機能関数と特徴関数の両方として使用できます。このような関数は、フィルター句、ソート句、およびソート式で使用できます。

このような関数の引数で参照するフィールドは、各関数の説明に基づいてインデックスフィールドまたは属性フィールドとして構成する必要があります。

tag_match: タグに基づいてクエリ句とドキュメントを照合し、一致したタグの重みを計算してドキュメントをスコアリングします

1. 概要

tag_match 関数は、クエリ句とドキュメントを照合することでパーソナライズされた検索を提供する必要があるほとんどのシナリオに適しています。たとえば、ユーザーがいいと思った店舗が最初に表示され、ユーザーが好む可能性のあるスポーツやエンターテイメントに関連するニュースが推奨されます。tag_match 関数は、キーと値のペアの配列をドキュメントに追加します。kvpairs 句を使用して、クエリ句でキーと値のペアを定義できます。tag_match 関数は、ドキュメント内のキーとクエリ句内のキーを照合し、一致したキーの各ペアのスコアを計算し、次に各ドキュメントの最終スコアを計算します。最終スコアを使用して、重みでドキュメントをソートしたり、ドキュメントをフィルタリングしたりできます。

次の図は、tag_match 関数が最終スコアを計算する方法を示しています。image

2. 構文

標準構文:

tag_match(query_key, doc_field, kv_op, merge_op)

拡張構文:

tag_match(query_key, doc_field, kv_op, merge_op, has_default, doc_kv, max_kv_count)

3. パラメーター

  • query_key: クエリ句のキーと値のペアを定義します。このパラメーターは、kvpairs 句を使用して指定する必要があります。各キーと値のペアでは、キーと値は等号(=)で区切られます。複数のキーと値のペアはコロン(:)で区切られます。例: kvpairs=query_tags:10=0.67:960=0.85:1=48。キーは 10、960、1 です。3 つのキーの値は 0.67、0.85、48 です。キーのリストのみを指定することもできます。例: kvpairs=cats:10:960:1。

  • doc_field: キーと値のペアを格納するドキュメント内のフィールドの名前を定義します。フィールドは、INT_ARRAY、FLOAT_ARRAY、または DOUBLE_ARRAY 型である必要があります。フィールドが FLOAT_ARRAY 型の場合、キーは照合のために 64 ビット整数に変換されます。キーは配列の奇数位置を占め、値は配列の偶数位置を占めます。配列の例: [key0 value0 key1 value1…]。

  • kv_op: クエリ句のキーがドキュメントのキーと一致する場合、値に対して実行される操作です。このパラメーターは、max、min、sum、avg、mul、query_value、doc_value、または定数に設定できます。query_value 関数は、クエリ句で一致したキーの値を返します。doc_value 関数は、ドキュメントで一致したキーの値を返します。

  • merge_op: クエリ句の複数のキーがドキュメントの複数のキーと一致する場合、kv_op 操作で指定された操作によって、一致したキーの各ペアのスコアが計算されます。次に、merge_op パラメーターを設定して、スコアに対して操作を実行できます。merge_op パラメーターは、max、min、sum、avg、または first_match に設定できます。first_match 操作は、最初に一致したキーのペアに対して計算されたスコアのみを返します。

  • has_default: 初期スコアを使用するかどうかを指定します。デフォルト値は false です。このパラメーターを true に設定すると、doc_field パラメーターの最初の値が初期スコアになります。doc_field パラメーターの例: [init_score k0 v0 k1 v1…]。初期スコアは基本スコアと見なすことができます。

  • doc_kv: doc_field パラメーターの値がキーと値のペアで構成されているかどうかを指定します。デフォルト値は true です。このパラメーターを false に設定すると、doc_field パラメーターの値はキーのみで構成されます。

  • max_kv_count: クエリ句から渡すことができるキーと値のペアの最大数です。デフォルト値は 50 です。値は 5120 以下の数値に変更できます。

4. 戻り値

戻り値は DOUBLE 型で、ドキュメントの最終スコアを示します。has_default パラメーターを false に設定するか、このパラメーターを設定しない場合、0 が返されます。64 ビット整数を返す場合は、int_tag_match 関数を使用する必要があります。戻り値を除き、int_tag_match 関数は tag_match 関数と同じ方法で使用できます。int_tag_match はソート式では使用できません。

5. シナリオ

シナリオ 1: 面白い、スポーツ、ニュース、音楽、科学など、大規模で包括的なフォーラムの投稿には、さまざまなタグが追加されます。OpenSearch にドキュメントをプッシュするときに、各タグに ID を割り当てることができます。たとえば、面白い、スポーツ、ニュース、音楽タグの ID は 1、5、3、6 です。これらのタグは tag フィールドに格納されます。前処理後に各投稿の各タグの重みを取得することもできます。たとえば、ある投稿の場合、面白い、スポーツ、ニュースタグの重みは 0.5、0.5、0.1 です。この場合、tag フィールドの値は [1 0.5 5 0.5 3 0.1] です。フォーラムメンバーによって実行される検索の長期的な分析の後、各メンバーのお気に入りの投稿タグを知ることができます。

たとえば、メンバー nba_fans はスポーツと面白いコンテンツに興味があり、このメンバーのスポーツと面白いタグの重みは 0.6 と 0.3 です。次に、kvpairs 句を使用して、タグと重みのペアをキーと値のペアとして定義し、このメンバーが投稿を検索するときにキーと値のペアをクエリ句に渡すことができます。kvpairs 句で定義されたフィールド名が user_tag の場合、このメンバーの user_tag フィールドの値は 5=0.6:1=0.3 です。このように、詳細ソート式で tag_match(user_tag, tag, mul, sum) 関数を使用すると、検索サービスはメンバーが興味を持っている投稿の重みを計算し、重みの高い投稿を最初にリストできます。

たとえば、このメンバーが上記の投稿を検索すると、面白いタグとスポーツタグの両方が一致する可能性があります。kv_op パラメーターを mul に設定して、クエリ句の各キーの値とドキュメントの一致する各キーの値の積を取得できます。この例では、スポーツタグのスコアは 0.5 × 0.6 = 0.3 です。面白いタグのスコアは 0.5 × 0.3 = 0.15 です。merge_op パラメーターを設定して、次の式を使用して 2 つのタグのスコアの合計を計算できます: 0.3 + 0.15 = 0.45。次に、合計が最終的なソートスコアに追加されます。このように、重みを計算することで、このメンバーが興味を持っている投稿をソートできます。

シナリオ 2:

商品は複数の属性タグを持つことができます。たとえば、1 は若い(年齢)、2 は中年(年齢)、3 はフレッシュ(スタイル)、4 はファッション(スタイル)、5 は女性(性別)、6 は男性(性別)を示します。

タグを照合したいだけで、ソートのためにタグの重みを計算したくない場合があります。この場合、options フィールドを使用してタグを格納できます。服に若い、ファッション、女性タグが付いている場合、options フィールドの値は [1 4 5] です。この値はキーのみで構成されています。ユーザーは、商品の属性タグと同様の属性タグも持っています。たとえば、若い女性ユーザーは、過去の取引でフレッシュスタイルの服を購入していました。この場合、このユーザーが服を検索するときに、user_options=1:3:5 フィールドをクエリ句に追加できます。kvpairs 句で定義されたフィールドはキーのみで構成されています。

ユーザーのお気に入りのタグを持つ商品を重みを計算してソートする場合は、ソート式で tag_match(user_options, options, 10, sum, false, false) 関数を使用できます。user_options パラメーターはクエリ句のタグを格納し、options パラメーターはドキュメントのタグを格納します。kv_op パラメーターの値 10 は、一致したキーの各ペアのスコアが 10 であることを示します。has_default パラメーターの値 false は、初期スコアが使用されないことを示します。doc_kv パラメーターの値 false は、doc_field パラメーターの値がキーのみで構成されていることを示します。

上記の若い女性ユーザーが上記の服を検索すると、女性タグと若いタグの両方が一致し、両方のタグのスコアは 10 になります。merge_op パラメーターで指定された sum 操作が 2 つのスコアに対して実行された後、服の最終スコアは 20 になります。このように、タグに関する重み情報なしで、重みでドキュメントをソートできます。

使用上の注意

  • 関数の引数で参照するフィールドは、属性フィールドとして構成する必要があります。

  • tag_match 関数をフィルター句またはソート句で使用する場合は、query_key、kv_op、merge_op、has_default、および doc_kv パラメーターを二重引用符(")で囲む必要があります。例: sort=-tag_match("user_options", options, "mul", "sum", "false", "true", 100)。

  • tag_match 関数は整数型のキーを照合します。したがって、クエリ句とドキュメントのキーは整数に変換する必要があります。キーが浮動小数点数の場合、tag_match 関数は強制的に整数に変換します。

ドキュメントには次の 10 個のタグがあります:

1: 金融経済
2: テクノロジー
3: スポーツ
4: エンターテイメント
5: ファッション
6: 教育
7: 旅行
8: ゲーム
9: 科学
10: 医療

例 1: 同じキーワードだがタグが異なるタイトルをソートする

image「chiji」を検索すると、前の図に示すように、2 つのドキュメントが取得されます。2 つのドキュメントのタグは異なります。最初のドキュメントのタグ ID は、金融経済を示す 1 です。2 番目のドキュメントのタグ ID は、ゲームを示す 8 です。ゲームタグが付いたドキュメントを最初に表示する場合は、tag_match 関数を使用できます。次の例は、ソート式ソート句で tag_match 関数を使用する方法を示しています:

kvpairs 句: type:8
ソート式: tag_match(type, type_arr, 10, max,false,false) 
ソート句: tag_match("type", type_arr, 10, "max","false","false")

次の図は、ソート式を使用して得られた検索結果を示しています。image次の図は、ソート句を使用して得られた検索結果を示しています。image

例 2: パーソナライズされたレコメンデーションのために複数のタグの重みに基づいて最終スコアを計算してタイトルをソートする

image前の図に示すように、第 1 レベルのタグが同じ場合は、第 2 レベルのタグのスコアを計算する必要があります。次の例は、ソート式ソート句で tag_match 関数を使用する方法を示しています:

kvpairs 句: type:3=2:10=1
ソート式: tag_match(type, type_arr, 10, sum,false,true) 
ソート句: tag_match("type", type_arr, 10, "sum","false","true")

image

例 3: 重みの異なる同じタグを持つタイトルをソートする

image前の図で赤枠で囲まれたドキュメントは同じタグを持っていますが、タグの重みが異なります。次の例は、ソート式ソート句で tag_match 関数を使用する方法を示しています:

kvpairs 句: type:3=2:9=2
ソート式: tag_match(type, type_arr, sum, sum,false,true) 
ソート句: tag_match("type", type_arr, "sum", "sum","false","true")

image

説明

Java 用 SDK の使用例コード: 検索デモ