Последние пару часов я возился со всевозможными вариациями полнотекстового поиска 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 ДЖОН ДЖЕКСОН , я получу "11/05/1964" ИЛИ "ДЖОН *" ИЛИ "ДЖЕКСОН *" и эти результаты :
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, я не получу никаких результатов.