Sql Server 2008 не игнорирует шумовое слово в полнотекстовом фразовом запросе? - PullRequest
2 голосов
/ 29 июля 2011

Предположим, у нас есть таблица с полнотекстовым полем. Это поле называется text. Содержание таблицы будет:

car wash
car and wash

Слово and в моем stoplist

Теперь я буду запрашивать эту таблицу, используя этот sql:

select * from mytable
where contains(text, '"car wash"')

Этот запрос возвращает только строку car wash, а не строку car and wash. Предполагая, что слово and является стоп-словом, почему Sql не возвращает строку car and wash?

Я знаю, что я выполняю поиск по фразе (используя ""). Это именно то, что мне нужно, но я думаю, что Sql должен игнорировать слова в стоп-листе, а это не то, что происходит. Это сводит меня с ума.

Насколько я понимаю, когда алгоритм FT находит фразу типа car and wash, он будет индексировать только car и wash. Это правда?

Также, когда я запрашиваю ft_parser, он говорит, что я ожидал, что он скажет:

SELECT * FROM sys.dm_fts_parser ('"car and wash"', 1033, 5, 0)

    special_term    display_term    
    Exact Match         car 
    Noise Word          and 
    Exact Match         wash    

Есть мысли?

1 Ответ

0 голосов
/ 29 июля 2011

Посмотрите на эту статью: стоп-слова

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

после того, как fts игнорирует "и" word, позиции "car" и "wash" будут равны 1 и 3. Таким образом, он не может быть найден.

Вместо этого я предлагаю другой термин. Может быть, вы хотели бы использовать что-то вроде «автомойка И», или другой термин. Это зависит от бизнес-логики

...