Intereting Posts
Tsql упорядочивает данные по определенным строковым значениям Как получить 5 последних комментариев (SQL-запрос для SQL Server) для каждого пользователя? Как получить год в формате YY в SQL Server Не удалось преобразовать значение параметра из текстового поля в строку Бесплатная альтернатива PowerDesigner? Log-Shipping: Почему вы выбрали режим «Нет восстановления»? SQL Server 2008 – Пользователь не может получить доступ к восстановленной базе данных Обновление индекса эластичного поиска при изменении таблицы SQL Server SQL Server. Получите все дочерние строки в отношениях «многие ко многим»? Вставка динамической таблицы TSQL Неофициальные обновления системных каталогов не допускаются Как я могу декодировать трафик SQL Server с помощью wirehark? Строковое выражение для оценки на число Oracle Insert Into NVarchar2 (4000) не позволяет использовать 4000 символов? Как преобразовать запрос MSSQL CTE в MySQL?

Ранжирование полнотекстового поиска (SQL Server)

За последние пару часов я возился со всеми разновидностями полнотекстового поиска 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, и я не получу никаких результатов.

Solutions Collecting From Web of "Ранжирование полнотекстового поиска (SQL Server)"

Я обнаружил, что предложения AND и OR не применяются к столбцам. Создайте индексированное представление, которое объединяет столбцы, и вы получите лучшие результаты. Посмотрите мои прошлые вопросы, и вы найдете информацию, которая соответствует вашему сценарию.

Я также обнаружил, что мне лучше не добавлять «*». Я думал, что у него появятся больше матчей, но он, как правило, возвращает худшие результаты (особенно для длинных слов). В качестве промежуточного уровня вы можете добавлять только * до более длинных слов.

Пример, который вы даете, определенно странный.

Это не совсем эквивалентно, но, возможно, этот вопрос, который я задал ( How-To: Ranking Search Results ), может быть полезен?

Что произойдет, если вы удалите критерии DoB?

MS Полнотекстовый поиск действительно действительно черный ящик, который трудно понять и настроить. Вы в значительной степени воспринимаете его как IS, в отличие от Lucene, отлично подходит для настройки

Спасибо вам, ребята.

Фрэнк, вы были правы, что AND и OR не просматривали колонки, это было то, чего я не заметил вначале.

Чтобы получить наилучшие результаты, мне пришлось объединить все 5 столбцов в 1 столбец в представлении. Затем выполните поиск в одном столбце. Это дало мне точные результаты, которые я хотел без каких-либо дополнительных услуг.

Моя фактическая строка поиска после ее преобразования оказалась «Word1 *» и «Word2 *»,

Использование знака% все еще не делало то, что сказал msdn, что он должен делать. Значение, если я искал слово «Джош», и он был изменен на «Josh%», когда я искал, тогда «Джошуа» не будет найден. Довольно немой, но с «Джошем», тогда Джошуа будет найден.