MSSql полнотекстовый поиск слов, сокращенных точками - PullRequest
2 голосов
/ 12 сентября 2011

Я боролся со следующим запросом:

select * from table_name where contains((field1,field2),'"S.E.N.S"');

Ниже приводится текст, который у меня есть в поле 1: " SENS Productions "

Если я ищудля " production " я получаю результат, но не для " SENS ".

Есть идеи относительно того, как получить желаемый результат?Спасибо.


Обновление: версия Sql Server 2005 с пакетом обновления 3 (SP3).


Обновление: Ну, это довольно странно.Когда я задаю полнотекстовый текст для использования noiseENG.txt, запрос в моем вопросе работает нормально.Но все, что хранится в базе данных, на турецком языке, и все настройки установлены соответственно, включая noiseTRK.txt.Насколько я знаю, «SENS» - это не слово ни по-турецки, ни по-английски.Я могу установить его в noiseENG.txt, чтобы он работал, но я сомневаюсь, что это будет уместно.Может кто-нибудь знает / думает о причине, по которой noiseTRK.txt сломался в приведенном выше запросе?Спасибо.

PS Я протестировал файлы с немодифицированным шумом, а также версию турецкого файла с шумом, удаленную одной буквой.

1 Ответ

1 голос
/ 13 сентября 2011

Из коробки он может не работать для SQL 2005.

Насколько я помню, для строки "S.E.N.S Productions" средство разбиения слов в SQL 2005 FTS (полнотекстовый поиск) игнорирует пунктуацию и разбивает строку на отдельные буквы (S E N S) и слово "Productions". Отдельные буквы по умолчанию являются шумовыми словами и поэтому не будут включены в индекс.

Вы можете сделать пару вещей:

  1. Отредактируйте свой список шумовых слов, удалите отдельные буквы и перестройте свой индекс
  2. Обновитесь до более поздней версии SQL, так как изменилось поведение разрыва слов, чтобы корректно вернуть ваш результат в 2008 году.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...