7

SQL Server の全文検索で使用されるランキングに問題があります。

ユーザーが「foo bar」という 2 つの単語を検索するとします。ユーザーが OR 検索を行うことを想定しているため、「foo OR bar」を CONTAINSTABLE 呼び出しに渡します。私たちが見つけたのは、「foo」を 10 回含むが「bar」を含まない行は、「foo」と「bar」の両方を含む行よりもはるかに高いランクになるということです。両方の用語を含む行を、1 つの用語のみを複数回含む行よりも優先する必要があります。これを達成する方法について何かアドバイスはありますか?

RANKMETHOD 修飾子に関連するドキュメントを見つけましたが、これは SQL Enterprise 検索専用のようで、通常の SQL Server 2005 インストールでは利用できません。Lucene.Net に切り替えることもできますが、より良いランキングが利用できることを確認したいと考えています。複数の検索を行って結果をマージすることもできますが、検索される単語の数が増えると望ましくないように思えます。

4

4 に答える 4

3

クエリ SELECT * FROM CONTAINSTABLE (YourFullTextTable, *, '"foo bar" or "foo" ~ "bar" or "foo or bar"') を書き直してみてください。このクエリは本質的に、正確な "foo bar" > "foo" の近くに "bar" > foo または bar を持つすべてのレコードをランク​​付けする必要があります

于 2009-12-23T21:16:52.593 に答える
3

RANKMETHOD は、SQL Server のどのエディションでも使用できません。CONTAINSTABLE 検索に渡すキーワードを作成していて、どの単語がより「重要」であるかがわかっている場合は、ISABOUT と WEIGHT で単語をランク付けできます。

たとえば、foo のランクが bar よりも高い場合、次のようにすることができます。

SELECT * FROM CONTAINSTABLE (YourFullTextTable, *, 'ISABOUT("foo" WEIGHT (0.5), "bar" WEIGHT(0.3))')

于 2008-12-02T17:46:36.280 に答える
1

ここでは、逆インデックスとコサイン ランキング (全文検索システムのコア アルゴリズムとデータ構造) について簡単に説明しました

純粋なコサイン ランキングでは、foo (1)、bar (1) は、foo (10)、bar (0) よりも foo、bar が占めるベクトルに近いはずです。コサイン値を事後的にいじることができます。これは基本的にPagerankが行うことです。フルテキスト検索で、軸に重みを付けるのではなく、内積を計算した後にコサイン ランキングをいじっている場合、これは foo の不均衡な重要性を説明しています。

于 2008-10-28T21:48:54.363 に答える
1

これをフォローアップするために..文字列「AまたはB」と照合するときに、文字列AおよびBを含む行のランキングが低かった理由は、AがBとは異なる列にあったためです。マージするテーブルにビューを作成するとそれらの列を 1 つの列にまとめると、「A または B」のランキングは予想以上になります。

于 2008-11-10T07:31:05.973 に答える