SQL Server Полнотекстовый поиск Escape-символы? - PullRequest
17 голосов
/ 15 июня 2009

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

1 Ответ

26 голосов
/ 05 августа 2009

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

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

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

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

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 (или что-то еще), где такое поведение четко указано. Но я нашел официальную статью , в которой рассказывается, как преобразовывать кавычки для полнотекстовых поисковых запросов, которая [неявно] соответствует описанному выше алгоритму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...