在過去的幾個小時裏,我一直在討論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