СОДЕРЖИТ в полнотекстовом поиске не все результаты - PullRequest
4 голосов
/ 25 декабря 2011

Я использую полнотекстовый поиск в SQL Server 2008. Следующий запрос

select * From MyTable where contains( *, 'FLOW AND VALVE')

возвращает две строки:

1. FLOW CONTROL VALVE
2. FLOW VALVE

но следующий запрос

select * From MyTable where contains( *, '"FLOW AND VALVE"'))

возвращает только одну строку:

1. FLOW CONTROL VALVE

Почему второй запрос не возвращает вторую строку?

1 Ответ

5 голосов
/ 25 декабря 2011

Если вы работаете на SQL Server 2008, вы можете получить некоторые подсказки от запуска

SELECT * 
FROM sys.dm_fts_parser('FLOW AND VALVE',1033,0,0)

SELECT * 
FROM sys.dm_fts_parser('"FLOW AND VALVE"',1033,0,0)

CONTAINS( *, 'FLOW AND VALVE') интерпретируется как два <simple_term> поиска, объединенных вместе с логическим условием.то есть CONTAINS( *, 'FLOW') AND CONTAINS( *, 'VALVE')

CONTAINS( *, '"FLOW AND VALVE"')) интерпретируется как поиск по фразе, а "И" игнорируется как слово с шумом.

Почему второй соответствует «КЛАПАНУ УПРАВЛЕНИЯ ПОТОКОМ», а не «КЛАПАНУ ПОТОКА» Из этой статьи

Хотя он игнорирует включение стоп-слов,полнотекстовый индекс учитывает их положение.

, поэтому, по сути, наличие стоп-слова действует как совпадение с подстановочным словом.

...