Полный текстовый поиск SQL Server -для фразы, содержащей дефис, не возвращает ожидаемых результатов

У нас есть приложение, которое использует базу данных SQL Server 2008 и полнотекстовый поиск -. Я пытаюсь понять, почему следующие запросы ведут себя по-разному:

Во-первых, фраза, содержащая слово через дефис, например:

contains(column_name, '"one two-three-four five"')

А во-вторых, идентичная фраза, где дефисы заменены пробелами:

contains(column_name, '"one two three four five"')

Полный текстовый индекс -использует локаль ENGLISH (1033 )и системный стоп-лист по умолчанию.

Из моих наблюдений за другими полными -текстовыми поисками, содержащими слова через дефис, первый должен допускать совпадения по one two three four fiveили one twothreefour five. Вместо этого он соответствует толькоone twothreefour five(а неone two-three-four five).


Тестовый случай

Настройка:

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

Запросы:

--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

Очистка:

drop fulltext index on ftTest
drop fulltext catalog ftTest_catalog;
drop table ftTest;
8
задан marc_s 25 July 2012 в 05:12
поделиться