我面临着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
。
答案 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,但它们不能全文索引。
任何想法.. 谢谢, 马库斯