このトピックでは、基本ソートで使用できる関数について説明します。
概要
基本ソートは、予備的なフィルタリング段階です。最初の検索結果から高品質なドキュメントを迅速に特定し、上位 N 件のドキュメントを選択します。これらの選択されたドキュメントは、次に高度ソートにかけられ、より詳細なスコアリングによって最終的なランキングが決定されます。基本ソートはパフォーマンスに大きく影響し、高度ソートは主に検索品質を決定します。したがって、基本ソートはシンプルかつ効率的である必要があり、高度ソートの主要な要素のみを使用します。基本ソートと高度ソートは、どちらもソート式を使用して設定します。
関数
static_bm25:静的テキスト関連度
-
詳細については、「static_bm25」をご参照ください。
-
パラメーター:なし。
-
戻り値:[0, 1] の範囲の float 値。
-
ユースケース:基本ソートで静的テキスト関連度スコアを使用するには、式を
static_bm25()に設定します。 -
注意事項:
static_bm25()関数は、default基本ソート式でデフォルトで使用されます。
static_bm25() のスコアが 1 を超える可能性がある場合:
シノニムなどのクエリ分析を設定すると、スコアが 1 を超えることがあります。たとえば、デフォルトのクエリは query=index:'apple' です。シノニムを設定すると、クエリは query=index:'apple' OR index:'iphone' に展開されます。ドキュメントに "apple" と "iphone" の両方が含まれている場合、static_bm25() スコアが加算されます。その結果、最終的な基本ソートのスコアが 1 を超える可能性があります。
exact_match_boost:最大ブースト重み
-
詳細については、「exact_match_boost」をご参照ください。
-
パラメーター:なし。
-
戻り値:[0, 99] の範囲の整数。
-
ユースケース:クエリ内の一致する各用語に指定されたブースト重みに基づいて結果をソートします。たとえば、クエリ
query=default:'Open Search'^60 OR default:'opensearch'^50を考えます。ドキュメント A に "Open Search" が含まれ、ドキュメント B に "opensearch" が含まれる場合、ドキュメント A はドキュメント B よりも上位にランク付けされます。これを実現するには、基本ソート式をexact_match_boost()に設定します。 -
注意事項:
-
この関数では、ターゲットフィールドにインデックスが作成されている必要があります。
-
ブースト値が指定されていないクエリ用語の場合、デフォルトのブースト値は 99 です。
-
専用アプリケーションの場合、基本ソートで
exact_match_boost関数を設定する際に、''、'sum'、または'max'のいずれかのパラメーターオプションを使用できます。ポリシー編集ページで、exact_match_boost()スコアリング機能で、[検索フィールド] ドロップダウンリストから集計方法 (max または sum) を選択します。次に、対応する [重み] を設定します。
-
timeliness:適時性スコア
-
構文:
timeliness(pubtime)。詳細については、「timeliness」をご参照ください。 -
パラメーター:
pubtimeは評価対象のフィールドです。このフィールドはint型で、値は秒単位の UNIX タイムスタンプである必要があります。 -
戻り値:[0, 1] の範囲の float 値。値が大きいほど、ドキュメントが新しいことを示します。タイムスタンプが未来の場合、関数は 0 を返します。
-
ユースケース:基本ソートで
create_timestampフィールドの適時性スコアを計算するには、式をtimeliness(create_timestamp)に設定します。 -
注意事項:
pubtimeフィールドを属性フィールドとして設定する必要があります。
timeliness_ms:適時性スコア
-
構文:
timeliness_ms(pubtime)。詳細については、「timeliness_ms」をご参照ください。 -
パラメーター:
pubtimeは評価対象のフィールドです。このフィールドはlong型で、値はミリ秒単位の UNIX タイムスタンプである必要があります。 -
戻り値:[0, 1] の範囲の float 値。値が大きいほど、ドキュメントが新しいことを示します。タイムスタンプが未来の場合、関数は 0 を返します。
-
ユースケース:基本ソートで
create_timestampフィールドの適時性スコアを計算するには、式をtimeliness_ms(create_timestamp)に設定します。 -
注意事項:
pubtimeフィールドを属性フィールドとして設定する必要があります。
normalize:正規化関数
-
関連度の計算中、ドキュメントの品質はさまざまな次元で測定されます。これらの次元からのスコアは、大きく異なる範囲を持つ場合があります。たとえば、ページのクリック数は数百万になることがありますが、静的テキスト関連度スコアは 0 から 1 の間です。これらのスコアは直接比較できません。これらの異なるスコアを単一の数式で使用するには、共通の範囲に正規化する必要があります。
normalize関数は、このプロセスを簡素化します。この関数は、線形、対数、アークタンジェントの 3 つの正規化方法をサポートします。関数は、指定したパラメーターに基づいて自動的に方法を選択します。valueパラメーターのみを指定した場合、アークタンジェント法が使用されます。valueとmaxを指定した場合、対数法が使用されます。value、max、minを指定した場合、線形法が使用されます。 -
構文:
normalize(value, max, min)。詳細については、「normalize」をご参照ください。 -
パラメーター:
valueは正規化する値で、double型である必要があります。値は、ドキュメントフィールドまたは別の式から取得できます。maxはオプションで指定する最大入力値で、double型である必要があります。minはオプションで指定する最小入力値で、double型である必要があります。 -
戻り値:[0, 1] の範囲の
double型の値。 -
ユースケース:
-
シナリオ 1:値の範囲が不明な
priceフィールドを正規化するには、次の式を使用します:normalize(price)。 -
シナリオ 2:最大値が 100 であることのみがわかっている
priceフィールドを正規化するには、次の式を使用します:normalize(price, 100)。 -
シナリオ 3:最大値が 100 で最小値が 1 であることがわかっている
priceフィールドを正規化するには、次の式を使用します:normalize(price, 100, 1)。 -
シナリオ 4:
distance関数の結果を [0, 1] の範囲に正規化するには、次の式を使用します:normalize(distance(longitude_in_doc, latitude_in_doc, longitude_in_query, latitude_in_query))。
-
-
注意事項:
-
関数パラメーターとして使用されるフィールドは、属性フィールドとして設定する必要があります。
-
アークタンジェント法を使用して正規化する場合、
valueが 0 未満であれば、正規化された値は 0 になります。 -
対数法を使用して正規化する場合、
maxの値は 1 より大きい必要があります。 -
線形法を使用して正規化する場合、
maxの値はminの値より大きい必要があります。
-