ソート式を使用すると、OpenSearch Retrieval Engine Edition が検索結果をランク付けする方法をコントロールするカスタムスコアリングロジックを定義できます。スキーマの属性フィールド、組み込みの数学関数、特徴量関数を使用して、販売量によるプロダクトのブースティング、時間減衰関数による古いドキュメントへのペナルティ付与、位置情報サービス (LBS) のための地理的距離による結果の重み付けなど、ランキング戦略に合わせた式を構築します。
式は 2 つのステージで実行できます。
粗いソート: large サンプル候補セットに対する第1段階のフィルタリングを実行します。
first_formulaパラメーターを使用します。詳細ソート: 絞り込まれたセットの正確な再ランキングです。
formulaパラメーターを使用します。
同じクエリで両方のステージを使用できます。組み合わせると、まず基本ソートでサンプル候補セットを絞り込み、次に高度ソートで結果を再ランク付けします。
基本ソート式は大量のドキュメントを処理します。大量のドキュメントをクエリする場合、基本ソート式で適切なドキュメント数を指定してください。式の評価に時間がかかりすぎると、クエリがタイムアウトする可能性があります。計算負荷の高い関数は、高度ソートステージで使用してください。
式の要素
ソート式は、3 種類の要素を組み合わせることができます。
| タイプ | 説明 |
|---|---|
| 演算子 | 算術、関係、論理、ビット単位、条件付き、およびセット演算子 |
| 組み込み関数 | 汎用的な数学関数(ln、pow、sqrt、およびnow |
| フィーチャー関数 | ドメイン固有のランキング信号(gauss_decay、distance、およびtext_relevance など)— 「フィーチャー関数 |
演算子
| 操作 | オペレーター | 説明 |
|---|---|---|
| 単項 | - | 式の値を否定します。例:-1、-max(width) |
| 算術 | +、-、*、/ | 標準的な算術演算です。例:width/10 |
| 関係 | ==、!=、>、<、>=、<= | 比較です。例:width >= 400 |
| 論理 | and、or、! | ブール論理です。例:width >= 400 and height >= 300、!(a > 1 and b < 2) |
| ビット単位 | &、|、^ | ビット単位の AND、OR、XOR です。例:3 & (price ^ pubtime) + (price | pubtime) |
| 条件付き | if(cond, thenValue, elseValue) | cond がゼロ以外の場合は thenValue を返し、cond がゼロの場合は elseValue を返します。例:if(2, 3, 5) は 3 を返し、if(0, 3, 5) は 5 を返します。cond の値には文字列 (LITERAL または TEXT 型) を指定できません。値の範囲は INT32 と同じである必要があります。 |
| IN | i in [value1, value2, …, valuen] | i がセット内にある場合は 1 を返し、それ以外の場合は 0 を返します。例:2 in [2, 4, 6] は 1 を返し、3 in [2, 4, 6] は 0 を返します。 |
組み込み関数
| 関数 | 説明 |
|---|---|
max(a, b) | a と b のうち大きい方の値を返します。 |
min(a, b) | a と b のうち小さい方の値を返します。 |
ln(a) | a の自然対数 (e を底とする対数) を返します。 |
log2(a) | a の 2 を底とする対数を返します。 |
log10(a) | a の 10 を底とする対数を返します。 |
sin(a) | a の正弦 (sin) を返します。 |
cos(a) | a の余弦 (cos) を返します。 |
tan(a) | a の正接 (tan) を返します。 |
asin(a) | a の逆正弦 (arcsin) を返します。 |
acos(a) | a の逆余弦 (arccos) を返します。 |
atan(a) | a の逆正接 (arctan) を返します。 |
ceil(a) | a 以上の最小の整数を返します。例:ceil(4.2) は 5 を返します。 |
floor(a) | a 以下の最大の整数を返します。例:floor(4.6) は 4 を返します。 |
sqrt(a) | a の平方根を返します。例:sqrt(4) は 2 を返します。 |
pow(a, b) | a の b 乗を返します。例:pow(2, 3) は 8 を返します。 |
now() | 1970-01-01 00:00:00 協定世界時 (UTC) からの経過秒数を返します。 |
random() | 0 から 1 までのランダム値を返します。 |
特徴量関数
特徴量関数は、ドメイン固有のランキング信号を提供します。各関数はそれぞれのページで説明されています。以下の表は、各関数がどのソートステージをサポートしているかを示しています。
| 関数 | 説明 | 概略ソート | 高度ソート |
|---|---|---|---|
static_bm25 | クエリとドキュメント間の静的テキスト関連度スコア。 | サポート済み | 非サポート |
exact_match_boost | 特定のクエリの最大重み。 | サポート済み | サポート済み |
timeliness | ドキュメントの適時性スコア。 | サポート済み | サポート済み |
timeliness_ms | ドキュメントの適時性スコア。 | サポート済み | サポート済み |
normalize | 数値を [0, 1] の範囲に正規化します。 | サポート済み | サポート済み |
distance | 2 点間の球面距離。LBS ランキングでよく使用されます。 | サポート済み | サポート済み |
gauss_decay | 参照点からの距離に基づくガウス減衰スコア。 | サポート済み | サポート済み |
linear_decay | 参照点からの距離に基づく線形減衰スコア。 | サポート済み | サポート済み |
exp_decay | 参照点からの距離に基づく指数減衰スコア。 | サポート済み | サポート済み |
kvpairs_value | kvpairs 句で指定されたフィールドの値。 | サポート済み | サポート済み |
in/notin | フィールド値が指定された値セットに含まれるか否かを返します。 | サポート済み | サポート済み |
tag_match | クエリキーワードをドキュメントタグと照合し、タグの重みによってスコア付けします。 | サポート済み | サポート済み |
first_phase_score | 基本ソート式によって生成されたスコア。高度ソートで一次ステージの結果を基に構築するために使用します。 | 非サポート | サポート済み |
text_relevance | クエリキーワードと指定されたフィールド間の関連度スコア。 | 非サポート | サポート済み |
field_match_ratio | フィールド内の term の総数に対する、一致した term の比率。 | 非サポート | サポート済み |
query_match_ratio | クエリキーワードの総数に対する、一致したフィールド term の比率。 | 非サポート | サポート済み |
fieldterm_proximity | クエリキーワードとフィールド term 間の近接度。 | 非サポート | サポート済み |
field_length | フィールド内の term 数。 | 非サポート | サポート済み |
query_term_count | アナライザがクエリをトークン化した後の term 数。 | 非サポート | サポート済み |
query_term_match_count | ドキュメント term と一致するクエリ term の数。 | 非サポート | サポート済み |
field_term_match_count | クエリと一致するフィールド term の数。 | 非サポート | サポート済み |
query_min_slide_window | それらの term を含む最小ウィンドウに対する、一致したフィールド term の比率。 | 非サポート | サポート済み |
ソート式の適用
どちらの式タイプも kvpairs 句のパラメーターを使用します。応答でスコアリングロジックを検査するには、config 句に rank_trace:DEBUG を追加します。
基本ソート式
first_formula パラメーターで式を設定します。
config=start:0,hit:10,rank_trace:DEBUG,format:json&&query=default:'Search'&&kvpairs=first_formula:price*0.1高度ソート式
formula パラメーターで式を設定します。
config=start:0,hit:10,rank_trace:DEBUG,format:json&&query=default:'Search'&&kvpairs=formula:price*0.1