ここ数時間、私は SQL Server の全文検索のあらゆる種類のさまざまなバリエーションをいじっていました。しかし、ランキングの仕組みがいまいちよくわかりません。私はいくつかの例に出くわしましたが、それらが他のものよりもどのようにランク付けされているかについて本当に混乱しています. 例えば
インデックスが作成されていない 5 つの列以上のテーブルがあります。すべてがnvarchar
フィールドです。
私はこのクエリを実行しています(ほぼ..別の名前で再入力しました)
SET @SearchString = REPLACE(@Name, ' ', '*" OR "') --Splits words with an OR between
SET @SearchString = '"'+@SearchString+'*"'
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;
したがって、11/05/1964 JOHN JACKSONを検索すると、 "11/05/1964" OR "JOHN*" OR "JACKSON*"と次の結果が得られます。
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 がはるかに高いランクになるはずです生年月日として。
OR を AND に変更すると、結果が得られません。