CONTAINSTABLE добавление 'of*' не возвращает результатов

У меня есть содержащийся запрос на SQL Server 2008:

SELECT contacts.*, [Rank] FROM 
CONTAINSTABLE(Contacts, SearchName, '("department*") AND ("work*")') tmp 
JOIN contacts on contacts.contactid = tmp.[key]
WHERE contacts.deleted = 0

Это возвращает 1 результат, как и ожидалось, однако, если пользователь ввел "из" в своих критериях поиска, запрос не даст результатов:

SELECT contacts.*, [Rank] FROM 
CONTAINSTABLE(Contacts, SearchName, '("department*") AND ("of*") AND ("work*")') tmp 
JOIN contacts on contacts.contactid = tmp.[key]
WHERE contacts.deleted = 0

Полное название контактной записи: "Отдел труда и пенсий".

То же самое происходит, если пользователь включает "и" в свой поиск. Почему эти слова нарушают запрос и есть ли способ обойти это, или мне нужно удалить слова перед выполнением поиска?

1 ответ

Решение

Вы должны узнать о стоп-словах. Это хорошо объяснено в документации.

Краткое объяснение, однако, состоит в том, что все полнотекстовые движки хранят список слов, которые не проиндексированы. Среди этих слов видны такие вещи, как "из", "the" и аналогичные, не содержащие содержания слова. Конечно, вы можете настроить сервер для распознавания этих слов. И это очень важно в некоторых приложениях: стоп-слова оказываются очень полезными при попытке определить язык документа.

В любом случае слово "из" находится в списке стоп-слов. Так что он не проиндексирован, и вы не можете найти его с помощью CONTAINSTABLE, Если вам нужно найти его, вы можете реализовать свой собственный список стоп-слов и перестроить индекс.

Другие вопросы по тегам