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

Функции CONTAINSTABLE и FREETEXTTABLE


При написании запросов к SQL-базе часто бывает удобно работать с полнотекстовыми запросами не как с предикатами в секции WHERE, а как с таблицами, и использовать характерные для таблиц операции, такие как связывание, упорядочивание или группирование. Для решения этой задачи в язык Microsoft Transact-SQL введены две функции CONTAINSTABLE и FREETEXTTABLE.

Результатом выполнения функций CONTAINSTABLE и FREETEXTTABLE являются таблицы. В зависимости от результатов поиска, эти таблицы могут содержать одну или несколько строк. А если подходящей информации найдено не было, то результирующие таблицы оказываются пустыми. Записи в этих таблицах состоят из двух полей. Первое поле называется KEY

и является уникальным ключом в таблице, по которой производится поиск. Второе поле является числовым, называется RANK

и имеет смысл степени соответствия найденной записи поисковому запросу. Такую степень соответствия часто называют рейтингом

или рангом найденной записи. В Microsoft SQL Server рейтинг варьируется от 0 (минимальная степень) до 1000 (максимальная степень соответствия запросу).

Теперь о параметрах этих функций. И CONTAINSTABLE, и FREETEXTTABLE имеют по три параметра. Первый параметр — это имя таблицы, по которой производится поиск. Второй параметр — это список полей, по которым ведется поиск, а третий — текст запроса. Синтаксис второго и третьего параметра в точности соответствует синтаксису соответствующих параметров предикатов CONTAINS или FREETEXT, которые подробно были рассмотрены выше.

Функции CONTAINSTABLE и FREETEXTTABLE редко используют самостоятельно. Чаще всего эти функции входят в состав запросов поиска по соответствующим таблицам. Приведем примеры использования этих функций.

Выше мы рассматривали взвешенный запрос поиска информации о курсе доллара и немецкой марки. Вот как выглядит оператор поиска этой информации с использованием функции CONTAINSTABLE:

SELECT Q.RANK, A.Header

FROM             Articles AS A,

                       

CONTAINSTABLE(Articles, Header ,'ISABOUT( "курс*",


                        "доллар*" WEIGHT(0.7),



                        FORMSOF(INFLECTIONAL, "немецкая марка") WEIGHT(0.3) )')                                             AS Q

WHERE         A.ID = Q.[KEY]

ORDER BY    Q.RANK DESC

Этот запрос возвращает заголовки статей, соответствующие запросу, и их рейтинги в порядке убывания соответствия запросу. Вот пример результат действия данного запроса на реальной базе экономических новостей:

RANK

 Header

258

 На валютных торгах на ММВБ объявлен технических перерыв при промежуточном курсе 8,253 рублей за 1 доллар США.

258

 Е. Гайдар считает реальным курс15 рублей за доллар.

242

 Снижение курса акций на Нью-йоркской фондовой бирже привело к значительному падению курса доллара относительно иены.

242

 Значительные колебания курса американского доллара в последние дни и наблюдавшаяся тенденция к снижению его курса не связаны с изменением ситуации в Японии.

238

 Падение курса рубля привело к снижению курса немецкой марки.

187

 Курс немецкой марки к доллару США на американских рынках падает из-за финансового кризиса в России, считает руководитель экономического отдела компании "Bear Sterns International".

187

 Утром 2 ноября на торгах в Европе вырос курс йены по отношению к доллару и немецкой марке.

184

 Центробанк России установил предел отклонения курса покупки от курса продажи наличной иностранной валюты в размере 15%.

173

 ММВБ отказалась от установления единого расчетного курса гривны к доллару США.

Аналогичным способом проиллюстрируем рассмотренный выше полнотекстовый запрос о состоянии рынка ценных бумаг. По запросу

SELECT Q.RANK, A.Header

FROM             Articles AS A,

                        FREETEXTTABLE(Articles, Header,

                                        'Каково состояние рынка ценных бумаг?')

                                        AS Q

WHERE         A.ID = Q.[KEY]

ORDER BY    Q.RANK DESC



был получен следующий ответ:

RANK

 Header

152

  Комиссия по рынку ценных бумаг Латвии приостановила действие лицензии, выданной Rietumu banka на посреднические операции на рынке ценных бумаг.

138

 Правительство не в состоянии обеспечить доходность государственных ценных бумаг на фондовом рынке.

123

 Американский фондовый рынок не утратил интерес к российским ценным бумагам.

118

 Закон о налогообложении операций с ценными бумагами должен разрабатываться совместно с участниками фондового рынка.

114

 Перемены в правительстве России положительно отразились на результатах торгов российскими ценными бумагами на фондовом рынке США.

114

 Вторничные торги на ММВБ не оказали существенного влияния на результаты торгов российскими ценными бумагами на фондовом рынке США.

114

 Объемы сделок по российским ценным бумагам на фондовом рынке США продолжают расти.

114

 Объемы сделок по российским ценным бумагам на фондовом рынке США уменьшились, но остаются довольно высокими.

114

 На внебиржевом рынке США цены на российские ценные бумаги упали.


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