おおまかなソートとは、取得されたすべてのドキュメントから上位 N 件の高品質ドキュメントを選択するプロセスです。次に、上位 N 件の高品質ドキュメントがスコアリングされ、精密なソートプロセスでソートされます。このようにして、ユーザーは要件に最も一致するドキュメントを取得できます。おおまかなソートは検索パフォーマンスに影響しますが、精密なソートは最終的なソート結果に影響します。したがって、精密なソートの主要な要素を使用して、効率的かつ簡単な方法でドキュメントをおおまかにソートできます。ソート式を使用して、ドキュメントをおおまかに、または精密にソートできます。このトピックでは、おおまかなソートに使用される特徴関数について説明します。
特徴関数
static_bm25(): クエリとドキュメントの一致度を示す静的テキスト関連度を返します
構文: static_bm25()
パラメータ: なし
戻り値: 戻り値の型は FLOAT です。有効な値の範囲は 0 から 1 です。
シナリオ 1: おおまかなソート式で static_bm25() 関数を使用して、テキストスコアを計算できます。
使用上の注意:
デフォルトでは、デフォルトのおおまかなソート式を使用すると、static_bm25() が有効になります。
クエリに対してクエリ分析を設定している場合、static_bm25() のスコアは 1 を超えます。例:
デフォルトのクエリ句 query=index: '苹果' に対してシノニムが設定されています。次に、クエリ句は query=index: '苹果' OR index:'apple' に変更されます。この場合、ドキュメントに 苹果 と apple の両方が含まれている場合、static_bm25() のスコアが累積され、最終的なおおまかなソートスコアは 1 より大きくなります。
exact_match_boost(): クエリ内の指定された用語の最大重みを計算します
パラメータ: なし
戻り値: 戻り値の型は INT です。有効な値の範囲は 0 から 99 です。
シナリオ: クエリ句は query=default:'开放搜索'^60 OR default:'opensearch'^50 です。一致する用語に対してクエリ句で指定されたブースト重みに基づいて結果をソートします。たとえば、ドキュメント A には用語 开放搜索 が含まれ、ドキュメント B には用語 opensearch が含まれています。この場合、ドキュメント A はドキュメント B よりも上位にランクされます。おおまかなソート式は exact_match_boost() です。
使用上の注意:
この関数のパラメータで参照するフィールドは、インデックスフィールドとして設定する必要があります。
クエリ句でブースト重みが指定されていない用語のデフォルトのブースト重みは 99 です。
exact_match_boost() 関数が排他的アプリケーションのおおまかなソート式で使用されている場合は、sum または max フィールドを指定できます。
timeliness: ドキュメントの新しさを示す適時性スコアを返します
構文: timeliness(pubtime), timeliness
pubtime: 適時性を評価するフィールド。フィールド値は、秒単位の INT 型である必要があります。
戻り値: 戻り値の型は FLOAT です。有効な値の範囲は 0 から 1 です。値が大きいほど、適時性が高いことを示します。フィールドの値が現在の時刻より後の場合、0 が返されます。
シナリオ: おおまかなソート式で timeliness(create_timestamp) 関数を使用して、create_timestamp フィールドの適時性スコアを計算できます。
使用上の注意:
pubtime フィールドは属性フィールドとして設定する必要があります。
timeliness_ms: ドキュメントの新しさを示す適時性スコアを返します
構文: timeliness_ms(pubtime), timeliness_ms
pubtime: 適時性を評価するフィールド。フィールド値は、ミリ秒単位の INT 型である必要があります。
戻り値: 戻り値の型は FLOAT です。有効な値の範囲は 0 から 1 です。値が大きいほど、適時性が高いことを示します。フィールドの値が現在の時刻より後の場合、0 が返されます。
シナリオ: おおまかなソート式で timeliness_ms(create_timestamp) 関数を使用して、create_timestamp フィールドの適時性スコアを計算できます。
使用上の注意:
pubtime フィールドは属性フィールドとして設定する必要があります。
normalize: 異なる値範囲のスコアを 0 から 1 の範囲の数値に正規化します
シナリオの概要: ドキュメントの関連度は、さまざまな次元から計算されます。さまざまな次元から計算されたスコアは、異なる値範囲にある場合があります。たとえば、Web ページのクリック数は数百万回になる可能性がありますが、Web ページのテキスト関連度スコアは 0 から 1 の値です。このような異なる値範囲の値を比較することはできません。normalize 関数は、異なる値範囲のスコアを同じ値範囲のスコアに正規化できます。このようにして、正規化されたスコアをさらに計算に使用できます。normalize 関数は、線形正規化、対数正規化、逆正接正規化の 3 つの正規化方法をサポートしています。関数は、入力パラメータに基づいて正規化方法を自動的に選択します。value パラメータのみが設定されている場合、normalize 関数は正規化に逆正接関数を使用します。value パラメータと max パラメータの両方が設定されている場合、normalize 関数は正規化に対数関数を使用します。value、max、min のすべてのパラメータが設定されている場合、normalize 関数は正規化に線形関数を使用します。
構文: normalize(value, max, min), normalize
value: ドキュメント内のフィールド、またはフィールド値または戻り値を正規化する式。フィールド値または戻り値は DOUBLE 型である必要があります。max: 正規化後の値範囲の最大値。このパラメータはオプションです。最大値は DOUBLE 型である必要があります。min: 正規化後の値範囲の最小値。このパラメータはオプションです。最小値は DOUBLE 型である必要があります。
戻り値: 戻り値の型は DOUBLE です。有効な値の範囲は 0 から 1 です。
シナリオ 1: price フィールドの値を正規化したいが、price フィールドの値範囲がわからない場合。この場合、normalize 関数を normalize(price) の形式で使用できます。
シナリオ 2: price フィールドの値を正規化したいが、price フィールドの値範囲の最大値 100 のみがわかっている場合。この場合、normalize 関数を normalize(price, 100) の形式で使用できます。
シナリオ 3: price フィールドの値を正規化し、最大値を 100、最小値を 1 に設定したい場合。この場合、normalize 関数を normalize(price, 100, 1) の形式で使用できます。
シナリオ 4: distance 関数の戻り値を 0 から 1 の値に正規化したい場合。この場合、normalize 関数を normalize(distance(longitude_in_doc, latitude_in_doc, longtitude_in_query, latitude_in_query)) の形式で使用できます。
使用上の注意:
関数で参照されるフィールドは、属性フィールドとして設定する必要があります。
正規化に逆正接関数が使用され、フィールド値または指定された式の戻り値が 0 より小さい場合、normalize 関数の戻り値は 0 です。
正規化に対数関数が使用される場合、max パラメータの値は 1 より大きい必要があります。
正規化に線形関数が使用される場合、max パラメータの値は min パラメータの値より大きい必要があります。