Подтвердить что ты не робот

Искажение символов в SQL Server Full Text?

Я выполняю запрос полного текстового поиска MS SQL Server. Мне нужно избежать специальных символов, чтобы я мог выполнять поиск по определенному термину, содержащему специальные символы. Есть ли встроенная функция для выхода из полнотекстовой строки поиска? Если нет, как бы вы это сделали?

4b9b3361

Ответ 1

Плохая новость: нет способа. Хорошие новости: вам это не нужно (так как это все равно не поможет).

Я столкнулся с подобной проблемой в одном из моих проектов. Я понимаю, что при построении полнотекстового индекса SQL Server рассматривает все специальные символы как разделители слов и, следовательно,

  • Ваше слово с таким символом представляется в виде двух (или более) слов в полнотекстовом индексе.
  • Эти символы удаляются и не отображаются в индексе.

Рассмотрим, что у нас есть следующая таблица с соответствующим полнотекстовым индексом для нее (которая пропущена):

CREATE TABLE [dbo].[ActicleTable] 
(
  [Id] int identity(1,1) not null primary key,
  [ActicleBody] varchar(max) not null
);

Рассмотрим позже, добавив строки в таблицу:

INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')

Попробуйте выполнить поиск:

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digitally')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improvements')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'folders')

и

SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'digital')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'improve')
SELECT * FROM [ArticleTable] WHERE CONTAINS(*, 'fold')

Первая группа условий будет соответствовать первой строке (а не второй), а вторая группа будет соответствовать только второй строке.

К сожалению, я не смог найти ссылку на MSDN (или что-то еще), где четко указано это поведение. Но я нашел официальную статью, которая рассказывает, как конвертировать кавычки для полнотекстовых поисковых запросов, которые [неявно] выровнены с описанный выше алгоритм.