Полнотекстовый указатель SQL Server Содержит точное совпадение поиска, содержащее "it"

Я довольно плохо знаком с полнотекстовым индексом на сервере SQL. Тем не менее, он работал очень хорошо для меня, недавно кто-то выполнил поиск точного соответствия для "IT Manager", и часть "IT" поиска, похоже, игнорируется.

например

SELECT * FROM CONTAINSTABLE(vCandidateSearch, SearchText, '"it manager"') 

а также

SELECT * FROM CONTAINSTABLE(vCandidateSearch, SearchText, '"manager"') 

вернуть те же результаты. Что я делаю неправильно?

2 ответа

Решение

"" не означает точное совпадение. Это просто ищет эту фразу в тексте.

Если у меня есть значение Большой красный дом

Пример совпадений

"big red house"
"big"
"house"
"red house"

Пример несоответствия

"the big yellow"

Если вам нужно, чтобы совпадал только "Большой красный дом", то вам лучше создать некластеризованный индекс для этого столбца и использовать предикат регулярной =

Проблема в том, что полнотекстовый движок видит "это" как "шум" или стоп-слово и игнорирует его.

Предполагая, что вы используете SQL 2008+, просмотрите документацию по стоп-листам и стоп-словам: https://msdn.microsoft.com/en-us/library/ms142551(v=sql.100).aspx

Это списки, содержащие различные слова-заполнители (например, "a", "it" и т. Д.) На разных языках, которые, как правило, бесполезны при полнотекстовом поиске и игнорируются.

По моему опыту, эти списки по умолчанию отлично подходят для поиска больших объемов текста, но часто не так полезны для таких вещей, как названия продуктов (или даже должностей), которые должны быть более конкретными.

Вы можете создавать свои собственные стоп-листы, содержащие (или нет) все стоп-слова, подходящие для вашей конкретной потребности.

Для поиска названия должности вполне может быть целесообразным вообще не использовать стоп-слова для этого конкретного столбца. Вы можете выбрать, какой стоп-лист (содержащий стоп-слова) ассоциируется с конкретным полнотекстовым индексом при его создании. Вы можете создать пустой список, если это необходимо, и использовать его в индексе только для одного столбца (хотя вам придется настроить свои запросы, чтобы учесть это).

В маловероятном случае, когда вы используете SQL 2005 или ниже, он использует гораздо более примитивную систему "шумовых слов", которые просто содержатся в текстовом файле: https://msdn.microsoft.com/en-us/library/ms142551(v=sql.90).aspx

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