2 つのテーブルで FREETEXTTABLE を 2 回使用し、結果をマージして上位 50 を返すストア プロシージャがあります。
問題は、「ブリュースターの女性」で検索すると、結果はテーブル A からランク 143 の「元ばかモサの告白」を返し、テーブル B からランク 102 の 2 番目の「ブリュースター プレイスの女性」が返されることです。 .
これはカウントのせいですか?(テーブル A の返された結果の合計は 2399 です。テーブル B の返された結果の合計は 3445 です。)
2 つのテーブルで FREETEXTTABLE を 2 回使用し、結果をマージして上位 50 を返すストア プロシージャがあります。
問題は、「ブリュースターの女性」で検索すると、結果はテーブル A からランク 143 の「元ばかモサの告白」を返し、テーブル B からランク 102 の 2 番目の「ブリュースター プレイスの女性」が返されることです。 .
これはカウントのせいですか?(テーブル A の返された結果の合計は 2399 です。テーブル B の返された結果の合計は 3445 です。)
簡単な答え:
Freetext ランキングは、OKAPI BM25 ランキング式に基づいています。クエリ内の各用語がランク付けされ、値が合計されます。フリーテキスト クエリは、屈折生成 (元のクエリ用語のステム形式) を介してクエリに単語を追加します。これらの単語は、それらが生成された元の単語との特別な重み付けや関係を持たない個別の用語として扱われます。シソーラス機能から生成された同義語は、個別の均等に重み付けされた用語として扱われます。
もちろん、はるかに長く、はるかに複雑な答えは、Microsoft のサイトで見つけることができます。高度な数学については、ここをクリックしてください。
1) ノイズ ファイルは数文字に制限されていました。つまり、"of" という単語が重要であると見なされるようになりました。
2) 2 つのテーブルの結果 (カウント) は重要です。小さいテーブルにはより適切な重み値が与えられる可能性が高いからです。これにより、小さなテーブルでランクが高くなるように歪められます。
Josef の MSDN へのリンクは、ランク値の計算方法を理解する上で優れていました。