La risposta accettata non è interamente corretta. Racchiudere il termine di ricerca tra virgolette rende il raggruppamento di parole una "frase" corrispondente. In questo caso, gli ampsers e (&
) possono essere trattati come un carattere letterale, ad esempio quando sono circondati da una o più lettere che non formano una parola conosciuta. Basta guardare il tuo "AT&T"
esempio, vediamo:
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
Returns:
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
Come si può vedere, la e commerciale non presenta alcun problema a tutti, fino a quando è racchiuso tra virgolette ("
) che stai già facendo, woo hoo!
Tuttavia, che non funziona in modo pulito per il "Johnson & Johnson"
esempio
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
Returns:
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
che sembrerebbe corrispondere anche un termine di ricerca di Johnson Johnson
, che non è tecnicamente corretto.
Così, oltre a racchiudere fra virgolette, è possibile anche convertire la e commerciale per essere un carattere di sottolineatura (_
) che viene gestito in modo diverso:
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
Ritorni:
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
E , facendo quella traduzione di carattere non sembra influenzare negativamente la ricerca originale "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);
Resi:
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