0

我正面临一个挑战Full Text Search in SQL SERVER 2008.

我有 2 个表 A 和 B ,它们各自的列 a, b 。现在,我想对所有这 3 个表进行全文搜索,并具有组合搜索相关性。

这意味着,如果在所有两个表中都找到了搜索文本,则它的排名应该更高。如果它仅在 col 中找到。表 A 的 a,如果只在 col 中找到,则应该排在第二位。表B的b,那么它应该排在第三位

如何才能做到这一点。

像这样的查询,

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

发生的事情是,如果搜索结果存在于两个具有适当排名的表中,它会向我显示搜索结果。

但是,如果搜索结果只在一个表中,则它不会显示。如果我申请 a 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, 'search text') akt ON a.Id = akt.[Key] INNER JOIN FREETEXTTABLE(B, b, 'search text') 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, 'search text') akt ON a.Id = akt.[Key]

联盟

SELECT null as Aa, Bb, bkt.[Rank] as [Rank] FROM B b INNER JOIN FREETEXTTABLE(A, a, 'search text') akt ON a.Id = akt.[Key]

上述查询用于跨两个表搜索记录(使用排名)。第一个查询:只有搜索文本在两个表的列中的那些记录才会显示。

第二个查询:只有那些 searchtext 只在表 A 的列中的记录

第三个查询:仅那些 searchtext 仅在表 B 的列 b 中的记录

我的问题是,如果我必须搜索 4 或 5 个表,UNION 的数量会像疯了一样增加。它也会太复杂和缓慢。

那么,有没有其他方法可以减少我尝试过的这些 UNION 视图,但它们不能被全文索引。

任何想法..谢谢,马库斯

于 2012-07-27T05:50:56.760 回答