RANK BY 句
クエリの結果には、クエリによって返される行と、ランク列が SELECT 句に含まれている場合の各行のランク値の両方が含まれます。 ランク値は検索エンジンによって計算され、0 から 1000 の範囲の整数として返されます。 ランク結果をより意味のあるものにするために、クエリでは RANK BY 句で生のランク値を計算する方法を制御できます。
このトピックは次のように整理されています。
RANK BY 句
RANK BY 句の構文は次のとおりです。
WHERE ( <search_condition> )
RANK BY [ ( ] <rank_specification> [ ) ]
RANK BY 句は、その直前のsearch_conditionに適用され、実質的には、別の検索条件によって返される行よりも、その検索条件によって返される行のランクが低いか高いかを指定します。 search_conditionを囲むかっこが必要です。 ランク指定を囲むかっこは省略可能です。
1 つの条件に複数の RANK BY 句を適用できます。 かっこを使用して、追加の RANK BY 句を 1 つ後に含めることができます。
Note
フルテキスト述語は、0 ~ 1000 の範囲のランク値を返します。 フルテキスト以外の述語と一致するすべてのドキュメントのランク値は 1000 です。 ランク値を変更すると、この情報が考慮されます。
RANKBY 句のrank_specification部分は、ランク値に適用する 1 つ以上の関数を識別します。 WEIGHT 関数は、返された行の生のランク値に乗数を適用します。 乗数が小さい場合、結果のランク値は低くなります。 COERCION 関数を使用すると、返される行の特定のランク値を乗算、追加、または設定できます。 各ランク仕様には、ゼロまたは 1 つの WEIGHT 関数と 0 個以上の COERCION 関数を含めることができます。 RANK BY 句に WEIGHT 関数と COERCION 関数の両方が含まれている場合は、まず WEIGHT 関数を指定する必要があります。
WEIGHT 関数
WEIGHT 関数の構文は次のとおりです。
WEIGHT ( <weight_multipler> )
乗数は、0.001 から 1.000 までの 10 進数である必要があります。 検索条件述語によって返される生のランク値に重み乗数を乗算して、新しいランク値を設定します。
次の例では、WEIGHT 関数は、System.Document.LastAuthor フィールドの "Theresa" という単語を持つドキュメントに、System.Author フィールドの "Theresa" を持つドキュメントのランク値の半分を指定します。
WHERE CONTAINS ( System.Author,'"Theresa"' )
RANK BY WEIGHT ( 1.000 )
OR
CONTAINS ( System.Document.LastAuthor,'"Theresa"' )
RANK BY WEIGHT ( 0.500 )
Note
CONTAINS および FREETEXT 述語列の重み付け機能では、検索用語と乗数 ("software":0.25) の間にコロンを使用した短縮形式がサポートされています。 RANK BY 句では、短縮形式はサポートされていません。
RANK BY WEIGHT を使用する場合には制限があります。ブール条件を使用する CONTAINS 句では機能しません。たとえば、次の例は許可されていません。
CONTAINS ( System.Author,'"Theresa" OR "Teresa"' ) RANK BY WEIGHT ( 0.400 )
COERCION 関数
ランク強制関数を使用すると、加算または乗算によって、または特定の値を割り当てることによって、返されるランク値を変更できます。
COERCION 関数の構文は次のとおりです。
COERCION ( <coercion_operation> , <coercion_value> )
強制値は整数値です。
次の表では、使用可能な強制強制操作の設定について説明します。
強制型演算 | 説明 | 値の範囲 |
---|---|---|
ABSOLUTE | 返されるランク値は強制値で指定された値です。 | 0 から 1000 |
ADD | 返されるランク値は、生のランク値と指定された強制値の合計です。 | 0.001 から 1.0 |
MULTIPLY | 返されるランク値は、生のランク値と指定された強制値の積です。 | 0.001 から 1.0 |
重要
検索では、0 ~ 1000 の範囲のランク値のみを返すことができます。
次の例では、COERCION 関数を使用して、タイトルに "computer" を持つすべてのドキュメントのランクを 1000 に設定し、タイトルに "computer" と "software" の両方を含むドキュメントのランクを 4 分の 1 に減らします。
WHERE CONTAINS ( System.Title, 'computer' )
RANK BY COERCION ( ABSOLUTE , 1000 )
OR
CONTAINS ( System.Title, '"computer" AND "software"' )
RANK BY COERCION ( MULTIPLY, 0.750 )