Последние пару часов я возился со всевозможными вариантами полнотекстового поиска 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;
Таким образом, если я буду искать 05.11.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 должна иметь самый высокий рейтинг, поскольку строка поиска также соответствует имени и фамилии. как Дата рождения.
Если я изменю ИЛИ на И, я не получу никаких результатов.





Что произойдет, если вы удалите критерии DoB?
Полнотекстовый поиск MS - это действительно черный ящик, который сложно понять и настроить Вы в значительной степени воспринимаете это КАК ЕСТЬ, в отличие от Lucene, который отлично подходит для настройки
Я обнаружил, что предложения AND и OR неприменимы к столбцам. Создайте индексированное представление, объединяющее столбцы, и вы получите лучшие результаты. Посмотрите на мои прошлые вопросы, и вы найдете информацию, которая соответствует вашему сценарию.
Я также обнаружил, что лучше не добавлять "*". Я думал, что будет больше совпадений, но он, как правило, давал худшие результаты (особенно для длинных слов). В качестве компромисса вы можете добавлять * только к более длинным словам.
Пример, который вы приводите, определенно странный.
Лучше иметь вычисляемый столбец и полный текстовый индекс по этому столбцу, чем искать по отдельным столбцам?
Это не эквивалент полностью, но, возможно, этот вопрос, который я задал (Практическое руководство: ранжирование результатов поиска), может помочь?
Спасибо вам, ребята.
Фрэнк, вы были правы, что И и ИЛИ не пересекают столбцы, это то, чего я сначала не заметил.
Чтобы получить наилучшие результаты, мне пришлось объединить все 5 столбцов в 1 столбец в представлении. Затем выполните поиск в этом единственном столбце. Это дало мне точные результаты, которые я хотел, без каких-либо дополнений.
Моя фактическая строка поиска после преобразования оказалась «Слово1 *» И «Слово2 *»
Использование знака% по-прежнему не делает того, что, по утверждению msdn, должно делать. Это означает, что если я искал слово josh, и оно было заменено на "Josh%" при поиске, то "Joshua" не было бы найдено. Однако довольно тупой с «Джош *» тогда будет найден Джошуа.
как слить столбцы и точно использовать? у меня такая же проблема.