La respuesta aceptada no es completamente correcta. Encerrar el término de búsqueda entre comillas dobles hace que la agrupación de palabras sea una coincidencia de "frase". En este caso, los amplificadores y (&
) pueden ser tratados como un carácter literal, como cuando están rodeados por una o más letras que no forman una palabra conocida. Con sólo mirar su ejemplo "AT&T"
, vemos:
DECLARE @Term NVARCHAR(100);
SET @Term = N'"AT&T"';
SELECT * FROM sys.dm_fts_parser(@Term, 1033, 0, 0);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, 0, 1);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, NULL, 0);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, NULL, 1);
GO
Devuelve:
keyword group phrase occurrence special display expansion source
id id term term type term
0x0061007400260074 1 0 1 Exact Match at&t 0 AT&T
Como se puede ver, el símbolo de unión no presenta ningún problema en absoluto, con tal de que se encierra entre comillas dobles ("
) que ya estás haciendo, woo hoo!
Sin embargo, que no funciona tan limpiamente para el "Johnson & Johnson"
ejemplo:
DECLARE @Term NVARCHAR(100);
SET @Term = N'"Johnson & Johnson"';
SELECT * FROM sys.dm_fts_parser(@Term, 1033, 0, 0);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, 0, 1);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, NULL, 0);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, NULL, 1);
GO
Devuelve:
keyword group phrase occurrence special display expansion source
id id term term type term
0x006A006F0068006E0073006F006E 1 0 1 Exact Match johnson 0 Johnson & Johnson
0x006A006F0068006E0073006F006E 1 0 2 Exact Match johnson 0 Johnson & Johnson
que parecería coincidir también un término de búsqueda de Johnson Johnson
, que no es técnicamente correcto.
Así, además de encerrar entre comillas dobles, también puede convertir el signo de ser un guión bajo (_
) que se maneja de manera diferente:
DECLARE @Term NVARCHAR(100);
SET @Term = N'"Johnson _ Johnson"';
SELECT * FROM sys.dm_fts_parser(@Term, 1033, 0, 0);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, 0, 1);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, NULL, 0);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, NULL, 1);
GO
devoluciones:
keyword group phrase occurrence special display expansion source
id id term term type term
0x006A006F0068006E0073006F006E 1 0 1 Exact Match johnson 0 Johnson _ Johnson
0x005F 1 0 2 Exact Match _ 0 Johnson _ Johnson
0x006A006F0068006E0073006F006E 1 0 3 Exact Match johnson 0 Johnson _ Johnson
Y , al hacer eso, la traducción de un carácter no parece afectar negativamente a la búsqueda original "AT&T"
:
DECLARE @Term NVARCHAR(100);
SET @Term = N'"AT_T"';
SELECT * FROM sys.dm_fts_parser(@Term, 1033, 0, 0);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, 0, 1);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, NULL, 0);
SELECT * FROM sys.dm_fts_parser(@Term, 1033, NULL, 1);
Devoluciones:
keyword group phrase occurrence special display expansion source
id id term term type term
0x00610074005F0074 1 0 1 Exact Match at_t 0 AT_T