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
, Если вам нужно найти его, вы можете реализовать свой собственный список стоп-слов и перестроить индекс.