0

に関する課題に直面していますFull Text Search in SQL SERVER 2008.

それぞれの列 a, b を持つ 2 つのテーブル A と B があります。ここで、これら 3 つのテーブルすべてに対して全文検索を実行し、検索の関連性を組み合わせたいと考えています。

つまり、検索テキストが 2 つのテーブルすべてで見つかった場合、ランクが高くなるはずです。col でのみ見つかった場合。表 A の a の場合、col のみにある場合は 2 番目にランク付けする必要があります。テーブルBのbなら、3位になるはず

これはどのように行うことができますか。

このようなクエリ、

SELECT A.a, B.b, C.c, a.Title, akt.[Rank] + bkt.[Rank] /2  AS [Rank]
    FROM PublicationSearch b
    INNER JOIN Publication a ON a.Id = b.Id
    INNER JOIN FREETEXTTABLE(A, a, 'search text') akt ON a.Id = akt.[Key]
    INNER JOIN FREETEXTTABLE(B, b, 'search text') bkt ON b.Id = bkt.[Key] 

ORDER BY [Rank] DESC

何が起こっているのかというと、検索結果が両方のテーブルに適切なランクで存在する場合、検索結果が表示されます。

ただし、検索結果が 1 つのテーブルにのみある場合は、表示されません。を適用するLEFT JOINと、レコードが取得されますが、RANK = Null.

4

1 に答える 1

0

SELECT Aa, Bb, akt.[Rank] + bkt.[Rank] /2 AS [Rank] FROM B b INNER JOIN Publication a ON a.Id = b.Id INNER JOIN FREETEXTTABLE(A, a, '検索テキスト') akt ON a.Id = akt.[Key] INNER JOIN FREETEXTTABLE(B, b, '検索テキスト') bkt ON b.Id = bkt.[Key]

ORDER BY [ランク] DESC

連合

SELECT Aa, null as Bb, akt.[Rank] as [Rank] FROM A a INNER JOIN FREETEXTTABLE(A, a, '検索テキスト') akt ON a.Id = akt.[Key]

連合

SELECT null as Aa, Bb, bkt.[Rank] as [Rank] FROM B b INNER JOIN FREETEXTTABLE(A, a, '検索テキスト') akt ON a.Id = akt.[Key]

上記のクエリは、2 つのテーブル間で (ランキングを使用して) レコードを検索するためのものです。最初のクエリ : 検索テキストが 2 つのテーブルの両方の列にあるレコードのみが表示されます。

2 番目のクエリ: 検索テキストがテーブル A の列 a にのみあるレコードのみ

3 番目のクエリ: searchtext がテーブル B の列 b にのみあるレコードのみ

私の質問は、4 つまたは 5 つのテーブルを検索する必要がある場合、UNIONS の数が狂ったように増加するということです。複雑すぎて遅くなります。

したがって、これらのUNIONSを減らすことができる他の方法はありますかビューを試しましたが、全文索引を作成することはできません。

任意のアイデア..ありがとう、マーカス

于 2012-07-27T05:50:56.760 に答える