クエリの結果には、クエリによって返される行と、ランク列が 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 つずつ含めることができます。
手記
フルテキスト述語は、0 ~ 1000 の範囲のランク値を返します。 フルテキスト以外の述語と一致するすべてのドキュメントのランク値は 1000 です。 ランク値を変更すると、この情報が考慮されます。
RANKBY 句のrank_specification部分は、ランク値に適用する 1 つ以上の関数を識別します。 WEIGHT 関数は、返された行の生のランク値に乗数を適用します。 乗数が小さいと、結果のランク値は低くなります。 COERCION 関数を使用して、返される行の特定のランク値を乗算、追加、または設定できます。 各ランク仕様には、ゼロまたは 1 つの WEIGHT 関数と 0 個以上の COERCION 関数を含めることができます。 WEIGHT 関数と COERCION 関数の両方を RANK BY 句に含める場合は、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 )
手記
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> )
強制型指定値は整数値です。
次の表では、使用可能な強制操作の設定について説明します。
| 強制型化操作 | 形容 | 値の範囲 |
|---|---|---|
| 絶対 | 返されるランク値は、強制型指定値で指定された値です。 | 0 ~ 1000 |
| 足す | 返されるランク値は、生のランク値と指定された強制値の合計です。 | 0 ~ 1000 |
| 掛ける | 返されるランク値は、生のランク値と指定された強制値の積です。 | 0 ~ 1000 |
| MINMAX | 返されるランク値は、指定された最小強制値と最大強制値の間の CONTAINS または CONTAINSSEMANTIC の一致する項目の 0 から 1000 のランク スコアの線形マッピングです。 | 0 ~ 1000 |
大事な
検索では、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 )
次の例では、COERCION 関数を使用して、"computer" という用語を持つドキュメントの生のランクを、セマンティック一致に基づいて 500 から 800 の範囲にマップします。
WHERE CONTAINSSEMANTIC('text', *, 'computer', 1033)
OR CONTAINSSEMANTIC('image', *, 'computer', 1033)
RANK BY COERCION(MINMAX, 500, 800)
ORDER BY System.Search.Rank DESC
Merge(<merge_operation>)
RANK BY 句と共に使用して、すべての結果のランクを集計し、マージ結果の最終的なランク付けリストを生成します。
MERGE 関数の構文は次のとおりです。
RANK BY MERGE ( <merge_operation>)
マージ操作
次の表では、 merge_operation パラメーターでサポートされる操作について説明します。
| マージ操作 | 形容 |
|---|---|
| CONVEXCOMBINATION | このマージ アルゴリズムは、クエリに CONTAINS (字句検索)、CONTAINSSEMANTIC('Text',...)、CONTAINSSEMANTIC('Image'..) 句が含まれている場合にのみ使用する必要があります。(テキストと画像のセマンティック検索)。 この 3 つの句のスコアは加重合計アプローチを使用して結合され、セマンティック スコアと比較して大きな重みを割り当てることで字句スコアの優先順位が高くなります。 最終的なランクは 0 から 1000 の間になります。 |
| MIN | このマージ アルゴリズムは、AND カーソルの場合の既定の動作です。 すべての結果から最小ランクが選択されます。 |
| MAX | このマージ アルゴリズムは、OR カーソルの場合の既定の動作です。 すべての結果から最大ランクが選択されます。 |
手記
OR カーソルで RANK BY MERGE(MIN) を使用するか、AND カーソルで RANK BY MERGE(MAX) を使用すると、期待される結果は得られない。 構文およびセマンティック検索結果を 1 つの結果セットにマージする場合は、RANK BY 句と共に、CONVEXCOMBINATION 演算子と組み合わせてのみ MERGE 関数を明示的に使用することをお勧めします。
Example
次の例では、MERGE 関数を使用して、"Image" フィールドまたは "Text" フィールドの "computer" という単語と構文的および意味的に一致する項目を検索する方法を示します。 次に、RANK BY MERGE 演算子を使用して検索結果がランク付けされ、すべての結果のスコアが集計され、最終的なランク付けされたリストが生成されます。
WHERE (CONTAINS(*,'computer', 1033)
OR CONTAINSSEMANTIC('Image', *, 'computer', 1033)
OR CONTAINSSEMANTIC('Text', System.ItemNameDisplay, 'computer', 1033)
OR CONTAINSSEMANTIC('Text', *, 'computer', 1033))
RANK BY MERGE(CONVEXCOMBINATION)
CONTAINSSEMANTIC 述語の詳細については、 CONTAINSSEMANTIC 述語を参照してください。