在过去的几个小时里,我一直在讨论SQL Server全文搜索的各种不同变体。不过,我仍然无法弄清楚排名如何运作。我遇到了一些让我困惑的例子,他们的排名高于其他人。例如全文搜索排名(SQL Server)
我有一张表,5列+更多没有索引。全部是nvarchar
字段。
我运行此查询
SET @SearchString = REPLACE(@Name, ' ', '*" OR "') --Splits words with an OR between
SET @SearchString = '"'[email protected]+'*"'
print @SearchString;
SELECT ms.ID, ms.Lastname, ms.DateOfBirth, ms.Aka, ms.Key_TBL.RANK, ms.MiddleName, ms.Firstname
FROM View_MemberSearch as ms
INNER JOIN CONTAINSTABLE(View_MemberSearch, (ms.LastName, ms.Firstname, ms.MiddleName, ms.Aka, ms.DateOfBirth), @SearchString) AS KEY_TBL
ON ms.ID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 0
ORDER BY KEY_TBL.RANK DESC;
因此(嗯..几乎与我不同的名字重新输入),如果我搜索1964年11月5日JOHN JACKSON我会得到“11/05/1964" 年OR “约翰*” 或 “杰克逊*”这些结果:
ID -- First Name -- Middle Name -- Last Name -- AKA -- Date of Birth -- SQL Server RANK
----------------------------------------------------------------------------------
1 | DAVE | JOHN | MATHIS | NULL | 11/23/1965 | 192
2 | MARK | JACKSON | GREEN | NULL | 05/29/1998 | 192
3 | JOHN | NULL | JACKSON | NULL | 11/05/1964 | 176
4 | JOE | NULL | JACKSON | NULL | 10/04/1994 | 176
所以最后我的问题。我没有看到第1行和第2行是如何排在第3行之上的,以及为什么第3行的排名与第4行相同。第2行应该具有最高的排名,因为搜索字符串与First name和Last Name匹配作为出生日期。
如果我将OR更改为AND我没有得到任何结果。
如何合并列并准确使用?我有同样的问题。 – zsharp 2009-12-11 06:01:00