Главная » Microsoft SQL Server, Базы данных » Поиск слов

0

Как только каталог будет создан, функция полнотекстового поиска готова к работе. выполняется с помощью функции contains, которая помогает передать искомое слово механизму полнотекстового поиска и дождаться ответа. а в запросе может выполняться одним из двух методов: contains и ContainsTable.

Функция contains

Функция contains оперирует в предложении WHERE, почти как WHERE IN (критерий). Параметры, помещенные в скобки, передаются службе полнотекстового поиска, которая возвращает список первичных ключей, удовлетворяющих критерию.

Первым параметром, передаваемым службе MS Search, является имя столбца или звездочка, если поиск нужно выполнить во всех столбцах одной таблицы. Если предложение FROM содержит несколько таблиц, то все они должны быть перечислены в параметре contains. Приведенный в качестве примера запрос полнотекстового поиска ищет слово “Lion” во всех проиндексированных столбцах:

USE Aesop SELECT Title FROM Fable

WHERE CONTAINS (Fable.*,’Lion’)

Следующие таблицы содержат искомое слово либо в заголовке, либо в морали, либо в основном тексте:

Title

The Dogs and the Fox The Hunter and the Woodman The Ass in the Lion’s Skin Androcles

Функция ContainsTable

В предложении WHERE может содержаться не только ключевое слово полнотекстового поиска — функция ContainsTable работает как управляемая таблица или подзапрос и возвращает результирующий набор данных. Эта функция SQL Server открывает широкие возможности.

Результирующий набор данных эта функция возвращает в двух столбцах. Первый столбец, Key, идентифицирует строку, используя уникальный индекс, использованный при конфигурировании каталога.

Второй столбец, Rank, ранжирует строки, используя значения от 1 (наименьшее значение) до 1000 (наибольшее значение). Не существует большего или меньшего значения, которое может воспринять сервер. Этот диапазон определяется несколькими факторами.

?               Частота и уникальность слов в таблице.

?               Частота и уникальность слов в столбце.

В то же время не существует случаев, когда какое-либо слово не было ранжировано выше общеупотребительного.

Практически те же параметры определяют синтаксис функции ContainsTabele. Следующий запрос возвращает текстовые данные из службы MS Search:

SELECT *

FROM CONTAINSTABLE (Fable, *, ‘Lion’)

Будет получен следующий результат:

KEY RANK

3              86

4              80

20       48 14 32

Сам по себе ключ (поле Key) бесполезен для человека, однако, будучи объединенным с результатами обращения функции Contains Table к таблице Fable, позволяет получить столбцы ранга и заголовка:

SELECT Fable.Title, FTS.Rank

FROM Fable

JOIN CONTAINSTABLE (Fable, *, ‘Lion1) FTS ON Fable.FablelD = FTS.[KEY]

ORDER BY FTS.Rank DESC

Результат будет следующим:

Title                                 Rank

Androcles                         86

The Butt in the Lion’s Skin 80

The Hunter and the Woodman 4 8

The Dogs and the Fox        32

Четвертый параметр функции Contains Table ограничивает объем результатов, возвращаемых механизмом полнотекстового поиска, практически как предикат ТОР инструкции SELECT. Это подразумевает упорядочивание по рангу, так что в результат войдет заданное количество значений с наибольшим рангом. В следующем примере продемонстрировано использование этого параметра:

SELECT Fable.Title, Rank

FROM Fable

JOIN CONTAINSTABLE (Fable, *, ‘Lion’, 2) FTS ON Fable.FablelD = FTS.[KEY]

ORDER BY FTS.Rank DESC

В результат поиска войдут всего два значения:

Title                                          Rank

Androcles                                                                                86

The Ass in the Lion’s Skin                                                     8 0

Основное преимущество использования этого параметра заключается в том, что сам механизм полнотекстового поиска ограничивает объем результатов и не приходится дополнительно выполнять инструкцию SELECT с предикатом ТОР. Этот пример иллюстрирует принципы переноса нагрузки с клиентского компьютера на сервер, так как в данном случае механизм полно- текстового поиска MS Search является серверным процессом, a SQL Server — клиентским.

Поскольку механизм полнотекстового поиска является компонентом, отличным от SQL Server, он будет соревноваться с последним за ресурсы процессора. Исходя из этого, использование механизма MS Search наряду с SQL Server позволит более эффективно использовать многопроцессорные серверы. Механизм MS Search также интенсивно использует память и файл подкачки. В сильно загруженных базах данных с регулярными обновлениями и частым поиском информации в больших текстовых столбцах такое распределение функций будет лучшим решением.

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии