Я не совсем понимаю, зачем вы хотите FTS? Если вы хотите точно марш, это делается просто с помощью LIKE:
- SELECT * FROM тест
WHERE
данные LIKE '% мирового%'
- --results в
- Привет мир!
- SELECT * FROM тест
WHERE
данные LIKE '% J-мировой%'
- --results в
--Hello J-мире!
Если вы хотите играть с FTS. Создать и вести свой собственный (пользовательский) Полнотекстовые Stoplist
- Я не SQL Server 2005, но я проверил, что он работает в 2008 году.
Документы говорят, что это возможно только для уровня совместимости 100 (то есть в SQL Server 2008).
Хотя, попробовать его в 2005
В SSMS Базы данных \ имя_базы_данных \ Storage \ полнотекстового Stoplist -> правой кнопкой мыши и выберите "New полнотекстового StopList ...". Я назвал его vgvStoplist и удостоверился, что по умолчанию установлен флажок «Создать пустой syoplist».
В таблице SSMS правой кнопкой мыши dbo.test ---> Полнотекстовый индекс -> Свойства ---> Выберите страницу: общий, полный текст. Список индексов -> введите имя созданного пустого списка (Я вошел vgvStoplist)
Теперь запрос
выберите * из теста где содержит (данные, 'J-мир "') только
возвращает«H ello j-world '(без «Hello world»)
Это также может быть сделано через TSQL. Следуйте
MSDN
==== Обновление:
Ну, ваш вопрос показал, что понятие шума субъективно.
Это работало, потому что «j» - это системное стоп-слово (см. Поиск в системном стоп-листе (*) строкой «j» (3 символа), см. Также (**)), а «-», по-видимому, wordbreaker ,
Я не предлагал вам использовать пустой список. Я просто проиллюстрировал «как» с минимальными усилиями с моей стороны.
Разработка методов, подходящих для вас, зависит от вас. Я даже не специалист в этой области, чтобы давать советы. Я просто ответил вам по принципу здравого смысла
Создайте свой собственный полный стоп-лист, заполните его своим контентом.
Возможно, вы захотите повторно использовать содержимое списка остановок системы.
Для этого, вы можете создать
- (*) отдельный скрипт из системы stoplist
путем создания еще одного полнотекстового StopList маркировки его с «Создать из системы stoplist» тогда скрипта («Файл ...»или„New Query Editor Window“),
затем создать свой собственный сценарий, отредактировав копию () с помощью функции поиска и замены и/или скопировать & пасту из () ,
(**) Вот отрывок из сценария копии, названный мною как 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
Я отправил подвопрос Performace gains of searching with FTS over it with LIKE on indexed colum(s)?
Я также заметил что я ответил на основе функций, недоступных в SQL Server 2005
Должен быть MSSQL \ FTData \ noiseENG.txt, и мне понравились ответы на Noise Words in Sql Server 2005 Full Text Search
Я бы удалил 'j'. На самом деле, если бы я был вами, я бы создал noiseENG.txt с нуля. Но это ваши решения в зависимости от вашего контекста и нескольких неизвестных мне факторов.
Я считаю, что вам следует опубликовать его как отдельный вопрос. Я уже несколько раз был заблокирован на сайтах StackExchange (и все еще в SF) для обсуждения. Это не форум или дискуссия, ср. ВОПРОСЫ-ОТВЕТЫ.
Так вы изложили все остальные ответы из-за этого? На самом деле ваш ответ должен был быть размещен здесь в «оригинальной» теме, а другой пост должен быть помечен как дубликат. – Matt
Я закрыл дубликат, поэтому, пожалуйста, отредактируйте это с текстом вашего реального ответа. –
Спасибо, что звучит интересно. Я посмотрю на это. Из-за эффективности я не рассматривал решение «LIKE». Мне приходится иметь дело с миллионами текстов и миллионами ключевых слов. Благодарю. – cs0815