Следопыт для Microsoft SQL Server 2000

Предикат FREETEXT


Возможности поиска, предоставляемые CONTAINS, очень велики. Удачно сформулированные запросы позволяют пользователь находить информацию, точно соответствующую его пожеланиям. Однако зачастую пользователь не имеет времени или желания разбираться в тонкостях правильного построения логических запросов. Все, чего хочется пользователю— это быстро получить информацию об интересующем его предмете. Для обслуживания таких потребностей пользователей служит предикат FREETEXT.

Синтаксис предиката FREETEXT напоминает синтаксис CONTAINS: FREETEXT также употребляется в секции WHERE SQL-запроса. Так же, как и CONTAINS, предикат FREETEXT выполняет функции индикатора соответствия отдельных записей таблицы запросу. Подобно CONTAINS, оператор FREETEXT имеет два параметра, причем первый, как и в CONTAINS, определяет поле, по которому производится поиск. В качестве этого параметра также можно использовать символ ‘*’. Однако второй параметр имеет другой смысл: в операторе FREETEXT в качестве второго параметра передается текст запроса на естественном языке. Здесь пользователь не стеснен каким бы то ни было формальным синтаксисом: в качестве запроса годится любая фраза или целое предложение, которое представляется похожим на интересующую пользователя информацию. Примером такого полнотекстового поиска может служить следующий запрос:

SELECT * FROM Articles WHERE FREETEXT(*, 'Каково состояние рынка ценных бумаг?' )

При обработке такого запроса сервис полнотекстового поиска самостоятельно выделит из запроса все слова и словосочетания, построит запрос по этим терминам и проведет поиск. В результате этого поиска совершенно не обязательно будут найдены ровно эти же фразы: слова могут находиться в других формах, какие-то части исходного запроса могут отсутствовать.

Кроме того, при обработке такого запроса, поисковая система присвоит каждой найденной записи числовую степень соответствия запросу — ее рейтинг. Как и в случае с предикатом CONTAINS, в запросах, содержащих FREETEXT, эти рейтинги не доступны. Для того чтобы получить их, необходимо воспользоваться другой формой полнотекстового запроса — функцией FREETEXTTABLE. Эта функция, наряду с функцией CONTAINSTABLE, обсуждается в следующем разделе.



Содержание раздела