Запрос SQl Server 2005 Полнотекстовый поиск шумовых/стоп-слов
-
13-09-2019 - |
Вопрос
Можно ли получить список шумов полнотекстового поиска / стоп-слов из SQL Server 2005, обратившись к базе данных?
Я знаю, что слова noise находятся в текстовом файле ~/FTData/noiseEng.txt но этот файл недоступен для нашего приложения.
Я просмотрел таблицы sys.fulltext_*, но, похоже, в них нет нужных слов.
Решение
Похоже, что это невозможно в SQL 2005, но есть в SQL Server 2008.
Этот следующий запрос получает список всех стоп-слов, которые поставляются с SQL Server 2008.Это приятное улучшение, вы не можете сделать этого в SQL Server 2005.
Стоп-слова и стоп-листы - SQL Server 2008
Шумовые слова SQL Server 2005 были заменены стоп-словами.Когда база данных обновляется до SQL Server 2008 с предыдущей версии, файлы noise-word больше не используются в SQL Server 2008.Однако файлы noise-word хранятся в папке FTDATA\ FTNoiseThesaurusBak, и вы можете использовать их позже при обновлении или сборке соответствующего SQL Server стоп-листы 2008.Дополнительные сведения о обновлении файлов noise-word до списков остановок см. в разделе Полнотекстовый поиск Обновление.
Другие советы
Я просто копирую файл шумовых слов из \Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\FTData
в свое приложение и использую его для удаления ненужных слов.
Public Function StripNoiseWords(ByVal s As String) As String
Dim NoiseWords As String = ReadFile("/Standard/Core/Config/noiseENU.txt").Trim
Dim NoiseWordsRegex As String = Regex.Replace(NoiseWords, "\s+", "|") ' about|after|all|also etc.
NoiseWordsRegex = String.Format("\s?\b(?:{0})\b\s?", NoiseWordsRegex)
Dim Result As String = Regex.Replace(s, NoiseWordsRegex, " ", RegexOptions.IgnoreCase) ' replace each noise word with a space
Result = Regex.Replace(Result, "\s+", " ") ' eliminate any multiple spaces
Return Result
End Function