Tenemos una aplicación que utiliza una base de datos de SQL Server 2008 y una búsqueda de texto completo. Estoy tratando de entender por qué las siguientes búsquedas comportan de manera diferente:La búsqueda de texto completo de SQL Server que contiene un guión no arroja los resultados esperados
En primer lugar, una frase que contiene una palabra con guión, como esto:
contains(column_name, '"one two-three-four five"')
Y en segundo lugar, una misma frase, en donde los guiones se sustituyen por espacios :
contains(column_name, '"one two three four five"')
el índice de texto completo utiliza el inglés (1033) donde se encuentre y la lista de palabras irrelevantes del sistema por defecto.
A partir de mis observaciones de otras búsquedas de texto completo que contengan palabras con guiones, la primera debe permitir coincidencias en one two three four five
o one twothreefour five
. En cambio, solo coincide con one twothreefour five
(y no con one two-three-four five
).
caso de prueba
Configuración:
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
Consultas:
--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
Limpieza:
drop fulltext index on ftTest
drop fulltext catalog ftTest_catalog;
drop table ftTest;
La pregunta es más acerca de por qué * * servidor SQL muestra un comportamiento diferente para la coincidencia.Trabajar a su alrededor es ciertamente factible, pero simplemente no tiene sentido para mí que "dos-tres-cuatro-cinco" regrese a ambas filas, sin embargo "uno dos-tres-cuatro-cinco" no lo hará. Lo mismo para "uno dos-tres-cuatro". ¿Es este comportamiento realmente esperado? y si es así, ¿por qué? – Laviak