sql >> Base de Datos >  >> RDS >> Sqlserver

¿Caracteres de escape de búsqueda de texto completo de SQL Server?

Malas noticias:no hay manera. Buenas noticias:no lo necesita (ya que no ayudará de todos modos).

Me he enfrentado a un problema similar en uno de mis proyectos. Según tengo entendido, al crear un índice de texto completo, SQL Server trata todos los caracteres especiales como delimitadores de palabras y, por lo tanto:

  1. Su palabra con dicho carácter se representa como dos (o más) palabras en el índice de texto completo.
  2. Estos caracteres se eliminan y no aparecen en un índice.

Considere que tenemos la siguiente tabla con un índice de texto completo correspondiente (que se omite):

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

Considere más adelante que agregamos filas a la tabla:

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

Intenta buscar:

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

y

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

El primer grupo de condiciones coincidirá con la primera fila (y no con la segunda), mientras que el segundo grupo coincidirá solo con la segunda fila.

Desafortunadamente, no pude encontrar un enlace a MSDN (o algo así) donde se indique claramente dicho comportamiento. Pero encontré un artículo oficial que explica cómo convertir las comillas para consultas de búsqueda de texto completo, que está [implícitamente] alineado con el algoritmo descrito anteriormente.