В настоящее время я работаю над приложением, в котором у нас есть база данных SQL-Server, и мне нужно, чтобы работал полнотекстовый поиск, позволяющий нам искать имена людей.
В настоящее время пользователь может ввести a в поле имени, которое ищет 3 разных столбца varchar. Имя, Фамилия, Отчество
Допустим, у меня есть 3 строки со следующей информацией.
1 - Филипп - J - Фрай
2 - Эми - NULL - Вонг
3 - Лев - НУЛЬ - Вонг
Если пользователь вводит имя, такое как «Фрай», он возвращает строку 1. Однако, если они вводят Филиппа Фрая, или Фр, или Фила, они ничего не получают ... и я не понимаю, почему он это делает. Если они ищут Вонга, они получают строки 2 и 3, если они ищут Эми Вонг, они снова ничего не получают.
В настоящее время запрос использует CONTAINSTABLE, но я изменил его с помощью FREETEXTTABLE, CONTAINS и FREETEXT без каких-либо заметных различий в результатах. Табличные методы предпочтительнее, потому что они возвращают те же результаты, но с рейтингом.
Вот запрос.
....
@Name nvarchar(100),
....
--""s added to prevent crash if searching on more then one word.
DECLARE @SearchString varchar(100)
SET @SearchString = '"'+@Name+'"'
SELECT Per.Lastname, Per.Firstname, Per.MiddleName
FROM Person as Per
INNER JOIN CONTAINSTABLE(Person, (LastName, Firstname, MiddleName), @SearchString)
AS KEYTBL
ON Per.Person_ID = KEYTBL.[KEY]
WHERE KEY_TBL.RANK > 2
ORDER BY KEYTBL.RANK DESC;
....
Есть идеи ...? Почему этот полнотекстовый поиск не работает правильно?