Abbiamo un'applicazione che utilizza un database SQL Server 2008 e una ricerca full-text. Sto cercando di capire perché i seguenti ricerche comportano in modo diverso:La ricerca full-text di SQL Server per la frase contenente un trattino non restituisce i risultati previsti
In primo luogo, una frase che contiene una parola sillabata, in questo modo:
contains(column_name, '"one two-three-four five"')
E in secondo luogo, una frase identica, dove i trattini sono sostituiti da spazi :
contains(column_name, '"one two three four five"')
L'indice di testo completo utilizza l'impostazione locale INGLESE (1033) e l'elenco di arresto predefinito del sistema.
Dalle mie osservazioni di altre ricerche full-text contenenti parole con trattino, il primo deve consentire le corrispondenze su one two three four five
o one twothreefour five
. Invece, corrisponde solo a one twothreefour five
(e non a one two-three-four five
).
banco di prova
Setup:
create table ftTest
(
Id int identity(1,1) not null,
Value nvarchar(100) not null,
constraint PK_ftTest primary key (Id)
);
insert ftTest (Value) values ('one two-three-four five');
insert ftTest (Value) values ('one twothreefour five');
create fulltext catalog ftTest_catalog;
create fulltext index on ftTest (Value language 1033)
key index PK_ftTest on ftTest_catalog;
GO
Query:
--returns one match
select * from ftTest where contains(Value, '"one two-three-four five"')
--returns two matches
select * from ftTest where contains(Value, '"one two three four five"')
select * from ftTest where contains(Value, 'one and "two-three-four five"')
select * from ftTest where contains(Value, '"one two-three-four" and five')
GO
Cleanup:
drop fulltext index on ftTest
drop fulltext catalog ftTest_catalog;
drop table ftTest;
La domanda è più su * perché * SQL server presenta un comportamento diverso per la corrispondenza.Lavorare in giro è certamente fattibile, ma semplicemente non ha senso per me che "due-tre-quattro cinque" restituirà entrambe le righe, tuttavia "uno due tre tre quattro" non lo faranno. Idem per "one two-three-four". Questo comportamento è davvero previsto? e se sì, perché? – Laviak