2009-06-15 12 views
14

Estoy haciendo una consulta de búsqueda de texto completo de MS SQL Server. Necesito escapar caracteres especiales para poder buscar un término específico que contenga caracteres especiales. ¿Hay una función incorporada para escapar de una cadena de búsqueda de texto completo? Si no, ¿cómo lo harías?Caracteres de escape de búsqueda de texto completo de SQL Server?

Respuesta

23

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

He enfrentado un problema similar en uno de mis proyectos. Mi opinión es que, si bien la construcción de un índice de texto, SQL Server trata todos los caracteres especiales como delimitadores de palabra y por lo tanto:

  1. Su palabra con tal 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 tenemos la siguiente tabla con un índice correspondiente en texto completo de la misma (que se omite):

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

consideraremos más adelante se añade filas a la tabla:

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

Intente 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á con la segunda fila solamente.

Desafortunadamente no pude encontrar un enlace a MSDN (o algo así) donde tal comportamiento se establezca claramente. Pero he encontrado un official article que dice cómo convertir comillas para consultas de búsqueda de texto completo, que [implícitamente] está alineado con el algoritmo descrito anteriormente.

Cuestiones relacionadas