在Sql server中跨多个表搜索相关性

时间:2012-07-26 10:16:55

标签: sql-server-2008 full-text-search ranking

我面临着Full Text Search in SQL SERVER 2008.

的挑战

我有两张表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

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

但是,如果搜索结果只在一个表中,那么它不显示。 如果我应用LEFT JOIN,那么记录即将到来,但RANK = Null

1 个答案:

答案 0 :(得分:0)

SELECT A.a,B.b,akt。[Rank] + bkt。[Rank] / 2 AS [Rank]     从B b     INNER JOIN出版物a 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 [Rank] DESC

UNION

SELECT A.a,null为B.b,akt。[Rank]为[Rank]     来自A     INNER JOIN FREETEXTTABLE(A,a,'搜索文本')akt on a.Id = akt。[Key]

UNION

选择null为A.a,B.b,bkt。[Rank]为[Rank]     从B b     INNER JOIN FREETEXTTABLE(A,a,'搜索文本')akt on a.Id = akt。[Key]

以上查询用于在两个表中搜索记录(使用排名)。 第一个查询:只显示那些记录,其中搜索文本位于两个表的两列中。

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

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

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

那么,还有其他方法可以减少这些UNIONS 我试过了Views,但它们不能全文索引。

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