Я не совсем понимаю, зачем вам FTS?
Если вам нужен точный марш, это делается просто с помощью LIKE:
- ВЫБРАТЬ * ОТ теста
ГДЕ
данные, как "% мира%"
- - результат в
--Привет, мир!
- ВЫБРАТЬ * ОТ теста
ГДЕ
данные, как "% j-мир%"
- - результат в
- Привет, J-мир!
Если вы хотите играть с FTS. Создайте и задействуйте свой собственный (настраиваемый) полнотекстовый стоп-лист
- У меня нет SQL Server 2005, но я проверил, что он работает в 2008 году.
Документы говорят, что это возможно только для уровня совместимости 100 (то есть в SQL Server 2008).
Хотя попробуйте в 2005
В базе данных SSMS \ YourDatabaseName \ Storage \ Full Text Stoplist -> щелкните правой кнопкой мыши и выберите «New Full-text StopList ...». Я назвал его vgvStoplist и убедился, что по умолчанию выбрана радиокнопка «Создать пустой список».
В SSMS щелкните правой кнопкой мыши таблицу dbo.test ---> Полнотекстовый индекс -> Свойства ---> Выберите страницу: Общие, Стоплист полнотекстового индекса -> введите имя созданного пустого списка (I введено vgvStoplist )
Теперь запрос
выбрать * из теста
где
содержит (данные, «j-мир»)
возвращает только «Hello j-world» (без «Hello world»)
Это также можно сделать через TSQL. Следуйте MSDN
==== Обновление:
Ну, ваш вопрос показал, что понятие шума субъективно.
Это сработало, потому что «j» является системным стоп-словом (см. Поиск системного стоп-листа (*) по строке «j» (3 символа), см. Также (**)), а «-», по-видимому, является разбивателем слов.
Я не предлагал вам использовать пустой список стоп-слов. Я только что проиллюстрировал "как это сделать" с минимумом усилий с моей стороны.
Разработка техник, подходящих для вас, зависит от вас. Я даже не эксперт в этой области, чтобы давать советы. Я только что ответил вам из принципа здравого смысла
Создайте свой собственный полнотекстовый StopList, заполните его своим контентом.
Возможно, вы захотите повторно использовать содержимое системного списка остановок.
Для этого вы можете создать
- (*) отдельный скрипт системного стоп-листа
путем создания еще одного полнотекстового StopList с пометкой «Создать из системного стоп-листа», а затем сценария («Файл ...» или «Окно нового редактора запросов»),
затем создайте свой собственный сценарий, отредактировав копию () с помощью функции поиска и замены и / или копирования и вставки из ().
(**) Вот выдержка из скриптовой копии, названной мной как vgv_sys_copy, из системы FT StopList:
ALTER FULLTEXT STOPLIST [vgv_sys_copy] ADD 'j' LANGUAGE 'French';
ALTER FULLTEXT STOPLIST [vgv_sys_copy] ADD 'j' LANGUAGE 'Italian';
ALTER FULLTEXT STOPLIST [vgv_sys_copy] ADD 'j' LANGUAGE 'Japanese';
ALTER FULLTEXT STOPLIST [vgv_sys_copy] ADD 'j' LANGUAGE 'Dutch';
ALTER FULLTEXT STOPLIST [vgv_sys_copy] ADD 'j' LANGUAGE 'Russian';
ALTER FULLTEXT STOPLIST [vgv_sys_copy] ADD 'j' LANGUAGE 'Swedish';
ALTER FULLTEXT STOPLIST [vgv_sys_copy] ADD 'j' LANGUAGE 'Simplified Chinese';
ALTER FULLTEXT STOPLIST [vgv_sys_copy] ADD 'j' LANGUAGE 'British English';
Update2
Я разместил подзапрос Производительность при поиске с FTS над ним с LIKE на индексированных столбцах?
Я также заметил, что ответил на основании функций, недоступных в SQL Server 2005
Должен быть MSSQL \ FTData \ noiseENG.txt, и мне понравились ответы на Шумовые слова в полнотекстовом поиске Sql Server 2005
Я бы удалил 'j'. На самом деле, на вашем месте я бы создал noiseENG.txt с нуля. Но это ваши решения в зависимости от вашего контекста и множества неизвестных мне факторов.
Полагаю, вы должны опубликовать это как отдельный вопрос. Меня уже несколько раз забанили на сайтах StackExchange (и до сих пор на SF) за обсуждения. Это не форум или форум, ср. FAQ.