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

:tag_match

最終更新日:May 26, 2026

互換性

この関数は、フィルター、ソート、および数式で使用できます。

関数のパラメーターとして使用するドキュメントフィールドは、属性として作成する必要があります

tag_match: スコアリング用のタグマッチング

1. 概要

tag_match 関数は、多くのクエリとドキュメントのマッチング要件に対応します。この関数は、検索結果のパーソナライズに特に役立ちます。たとえば、ユーザーがお気に入りに登録したストアを優先的に表示したり、ユーザーが好むスポーツやエンターテインメントのニュースを表示したりできます。tag_match の基本的な機能は、ドキュメントの配列フィールドに一連のキーと値のペアを格納することです。次に、kvpairs 句を通じてクエリに対応するキーと値の情報を渡すことができます。tag_match 関数は、クエリで指定されたキーをドキュメント内で検索し、一致した各キーのスコアを計算してから、これらのスコアを最終的なスコアに統合します。この結果は、スコアリングと重み付け、またはフィルタリングに使用できます。

計算プロセスは次のとおりです。

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 は、query_tags パラメーターに 3 つの要素 (10、960、1) とそれに対応する値 (0.67、0.85、48) が含まれていることを示します。クエリには、kvpairs=cats:10:960:1 のように、キーのリストのみを含めることもできます。

  • doc_field: キーと値のペアを格納するドキュメント内のフィールドを指定します。このフィールドは、整数配列 (int_array) または浮動小数点配列 (float_arraydouble_array) である必要があります。浮動小数点配列を使用する場合、キー値はマッチングのために int64 にキャストされます。配列は、キーと値を交互に格納します: [key0, value0, key1, value1, ...]。キーは偶数インデックス (0、2 など) にあり、対応する値は後続の奇数インデックスにあります。

  • kv_op: クエリとドキュメントのキーが一致したときに、それらの値に対して実行される操作です。サポートされている演算子には、max (最大値)、min (最小値)、sum (合計)、avg (平均)、mul (積)、query_value (クエリキーの値を使用)、doc_value (ドキュメントの値を使用)、および number (指定された定数) があります。

  • merge_op: 複数のキーマッチの結果を統合します。サポートされている演算子には、max (最大値)、min (最小値)、sum (合計)、avg (平均)、および first_match (最初の kv_op 計算の結果を使用し、残りを無視) があります。

  • has_default: 初期スコアを使用するかどうかを指定するブール値です。既定値は false です。true に設定すると、doc_field の最初の値がデフォルト値として扱われ、ベーススコアと同様に機能します。構造は [init_score, k0, v0, k1, v1, ...] になります。

  • doc_kvdoc_field の構造を指定するブール値です。既定値は true で、フィールドにキーと値のペアが含まれていることを意味します。false に設定すると、フィールドにはキーのみが含まれます。

  • max_kv_count: クエリで渡すことができるキーと値のペアの最大数です。既定値は 50 です。この制限を増やすことができますが、512 を超えることはできません。

4. 戻り値

最終的なスコアを表す double 値を返します。has_defaultfalse で、一致するものが見つからない場合は、0 を返します。int64 の結果を返すには、int_tag_match 関数を使用します。int_tag_match 関数は、tag_match と機能的に同一ですが、ランキング式では使用できません。

5. ユースケース

シナリオ 1: 大規模なオンラインフォーラムでは、投稿にさまざまなタグ (コメディ、スポーツ、ニュース、音楽、科学など) を割り当てることができます。ドキュメントを OpenSearch に送信するときに、各タグにタグ 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 の場合、nba_fans の値は 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 パラメーターを sum に設定すると、関数はスポーツとコメディのスコアを加算します (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_optionsoptions は、それぞれクエリとドキュメントのタグ情報を指定します。kv_op は定数値 10 に設定され、一致する各タグに 10 のスコアが割り当てられます。has_default パラメーターは false です。これは、初期値が不要なためです。doc_kv パラメーターは false で、ドキュメントフィールドにはキーのみが格納されていることを示します。

若い女性ユーザーが上記の衣料品をクエリすると、「若年層」と「女性」のタグが一致します。各一致のスコアは 10 です。summerge_op として使用すると、この製品の最終的なブーストスコアは 20 になります。この方法により、タグの重み情報がない場合でも、一致したドキュメントにスコアリングと重み付けを適用できます。

注意事項

  • 関数のパラメーターとして使用するフィールドは、属性として作成する必要があります。

  • filter または sort 句で tag_match を使用する場合は、query_keykv_opmerge_ophas_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: 同じキーワード、異なるタグ

1上の図に示すように、「バトルロワイヤル」を検索すると、2 つのドキュメントが返されます。ただし、ドキュメントのタイプは異なります: 1 - 金融 と 8 - ゲーム。「ゲーム」タグを持つドキュメントを最初に表示する場合は、tag_match 関数を設定できます。次のセクションでは、この関数をランキング式sort 句で設定する方法を示します。

kvpairs: type:8
ランキング式: tag_match(type, type_arr, 10, max,false,false) 
sort 句: tag_match("type", type_arr, 10, "max","false","false")

ランキング式を使用した結果:2sort 句を使用した結果:3

例 2: 複数のタグの統合スコア (ユーザーのパーソナライゼーション)

4画像に示すように、プライマリタグが同じ場合、セカンダリタグのスコアを照合する必要があります。次の例は、ランキング式sort 句で設定する方法を示しています:

kvpairs: type:3=2:10=1
ランキング式: tag_match(type, type_arr, 10, sum,false,true) 
sort 句: tag_match("type", type_arr, 10, "sum","false","true")

5

例 3: 同じタイプの複数のタグと異なるスコア

6画像に示すように、赤色で強調表示されたコンテンツには同じタグがありますが、各タグのスコアは異なります。次の例は、ランキング式sort 句で設定する方法を示しています:

kvpairs: type:3=2:9=2
ランキング式: tag_match(type, type_arr, sum, sum,false,true) 
sort 句: tag_match("type", type_arr, "sum", "sum","false","true")

7

説明

Java SDK の例Java SDK Search Demo