Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Caracteres de escape da pesquisa de texto completo do SQL Server?


Más notícias:não tem jeito. Boas notícias:você não precisa disso (já que não vai ajudar de qualquer maneira).

Eu enfrentei problema semelhante em um dos meus projetos. Meu entendimento é que, ao criar o índice de texto completo, o SQL Server trata todos os caracteres especiais como delimitadores de palavras e, portanto:
  1. Sua palavra com esse caractere é representada como duas (ou mais) palavras no índice de texto completo.
  2. Esses caracteres são removidos e não aparecem em um índice.

Considere que temos a seguinte tabela com um índice de texto completo correspondente (que é ignorado):
CREATE TABLE [dbo].[ActicleTable] 
(
  [Id] int identity(1,1) not null primary key,
  [ActicleBody] varchar(max) not null
);

Considere mais tarde, adicionamos linhas à tabela:
INSERT INTO [ActicleTable] values ('digitally improvements folders')
INSERT INTO [ActicleTable] values ('digital"ly improve{ments} fold(ers)')

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

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

O primeiro grupo de condições corresponderá à primeira linha (e não à segunda), enquanto o segundo grupo corresponderá apenas à segunda linha.

Infelizmente, não consegui encontrar um link para o MSDN (ou algo assim) onde tal comportamento seja claramente declarado. Mas encontrei um artigo oficial que diz como converter aspas para consultas de pesquisa de texto completo, que está [implicitamente] alinhado com o algoritmo descrito acima.