Полнотекстовый поиск с использованием Freetexttable при отсутствии слов шума - SQL Server 2008 R2 Transform Noise Words не работает
Я выполняю полнотекстовый поиск своего сайта с использованием SQL Server 2008 R2 и freetexttable. Я получаю эту ошибку при вводе стоп-слова:
Информационный: условие полнотекстового поиска содержало шумовые слова.
Поэтому я сделал то, что все сказали, и включил Transform Noise Words, чтобы слова stop / noise игнорировались и запрос мог продолжаться. Но это ничего не изменило
sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'transform noise words', 1;
RECONFIGURE;
GO
Я все еще получаю то же сообщение об ошибке. Так что сейчас мой единственный вариант - отключить стоп-лист, но это плохо, потому что, если кто-то добавит "в поиске", он вернет ВСЕ страницы, потому что на каждой странице есть "в". Я хочу удалить стоп-слова, но SQL Server 2008 R2 не работает для меня.
Кто-нибудь действительно заставил это работать в 2008 R2? Мой уровень совместимости был уже 100.
Могу ли я получить стоп-слова, которые игнорируются и не индексируются?
1 ответ
Я ценю, что очень поздно, это может помочь кому-то еще в будущем.
Создайте список новостей на основе системного списка; это создает новый стоп-лист со всеми словами в системном стоп-листе (который вы не можете изменить в 2008+ sql)
CREATE FULLTEXT STOPLIST slMyNewStopList
FROM SYSTEM STOPLIST AUTHORIZATION dbo;
Затем я проверил, что новый список был создан правильно;
select * from sys.fulltext_stoplists
select * from sys.fulltext_stopwords
В моем случае новый стоп-лист был ID 6. Слово, которое я хотел удалить, было этим; так как люди хотели иметь возможность искать "функцию ИТ" в данных. Поэтому я проверил слова в каталоге, как это;
select * from sys.fulltext_stopwords
where stoplist_id = 6 and stopword = 'it' and language like '%english%'
Чтобы удалить слово из стоп-листа, нужно вызвать системную функцию; я удалил его для английского и британского английского. Вы должны иметь точки с запятой в этой точке.
ALTER FULLTEXT STOPLIST slMyNewStopList DROP 'it' LANGUAGE 'English';
ALTER FULLTEXT STOPLIST slMyNewStopList DROP 'it' LANGUAGE 'British English';
Затем я подтвердил отсутствие слова в моем стоп-листе, снова выполнив запрос на выборку.
select * from sys.fulltext_stopwords
where stoplist_id = 6 and stopword = 'it' and language like '%english%'
Затем я обновил таблицу, в которой хотел найти слова ИТ;
USE [Database]
GO
ALTER FULLTEXT INDEX ON [dbo].[tblDocuments] SET STOPLIST = [slMyNewStopList]
Наконец я перестроил каталог, чтобы все документы были переиндексированы.
USE [Database]
GO
ALTER FULLTEXT CATALOG [catExample] REBUILD
GO