Полнотекстовый поиск (часть 2)
Продолжение первой части.
CONTAINS также поддерживает префиксный поиск с использованием шаблонного символа (*). Чтобы специфицировать поиск по префиксу, необходимо поместить искомую слово или фразу в двойные кавычки, за которыми следует символ *.
Предикат CONTAINS позволяет комбинировать простые условия поиска, используя булевские операции AND (&), AND NOT (& !) и OR (|). (Обратите внимание, что поддержка булевской операции OR NOT не предусмотрена.)
Предикат CONTAINS также поддерживает поиск с зазором с помощью ключевого слова NEAR (или операции ~). NEAR дает соответствие слов, близких друг к другу в исходных столбцах. В примере на слайде демонстрируется поиск с зазором NEAR, который ищет появления слова дом поблизости от слова -й. Результат состоит из пяти строк, содержащих эти слова поблизости друг к другу.
select NAME, SOCR
from dbo.STREET
where CONTAINS(*,'дом near -й')
Поиск с зазором с использованием NEAR дает отрицательный результат, если слова расположены далеко друг от друга. Для предиката CONTAINS близость слов считается достаточной, если они находятся на расстоянии в пределах примерно 50 слов друг от друга.
Функции FREETEXTTABLE и CONTAINSTABLE работают подобно сходным с ними по именам аналогам-предикатам, но возвращают результат в виде таблицы из двух столбцов: KEY и RANK. Столбец KEY содержит ключевое индексное значение, относящееся к уникальному индексу для соответствующих строк исходной таблицы. Столбец RANK содержит ранг значимости, являющийся числом в диапазоне от 0 до 1000. Это число показывает, насколько хорошо строка удовлетворила критерию выборки.
Подобно FREETEXT, предикат FREETEXTTABLE принимает единственное имя столбца или список столбцов для ограничения поиска, поисковую строку свободного текста и необязательный идентификатор языка. FREETEXTTABLE также принимает необязательный параметр top_n_by_rank, который ограничивает количество возвращаемых строк значением, указанным в RANK.
Функция CONTAINSTABLE обладает теми же поисковыми возможностями, что и предикат CONTAINS. Подобно предикату CONTAINS, функция CONTAINSTABLE принимает имя исходной таблицы, одно имя столбца или список столбцов, условие поиска в стиле CONTAINS и необязательный идентификатор языка. Функция CONTAINSTABLE также принимает необязательный параметр top_n_by_rank, который ограничивает возвращенные результаты определенным количеством строк, заданным RANK.
Помимо группы опций CONTAINS, поддерживаемых CONTAINSTABLE, есть еще условие ISABOUT, которое присваивает весовые коэффициенты найденным словам соответствия. Благодаря ISABOUT, каждое искомое слово получает значение весового коэффициента от 0.0 до 1.0. CONTAINSTABLE применяет его для оценки относительного ранга возвращенных значений столбца RANK.
Предыдущие версии FTS предоставляли системно-определяемые списки "шумных слов", которые использовались для игнорирования часто встречающихся слов, не помогающих в поиске, вроде the, а и an. Реализация средства "шумных слов" в предыдущих версиях хранила эти слова в текстовых файлах в файловой системе. В SQL Server 2008 представлена новая реализация классических "шумных слов", известная в iFTS под названием стоп-слов.
Стоп-слова управляются внутри базы данных SQL Server с использованием структур, называемых стоп-списками. Можно пользоваться стоп-списками, предоставленными системой, или же создать и управлять собственными стоп-списками посредством операторов CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST и DROP FULLTEXT STOPLIST.
Стоп-списки намного более гибкие, чем старые списки шумных слов, поскольку вы можете добавлять к ним ваши собственные слова.
В дополнение к поиску текстовых данных в текстовых столбцах базы данных iFTS может использоваться для выполнения поиска в документах, хранящихся в базе данных. Как и при поиске в базе, необходимо наличие полнотекстового индекса для документов, в которых планируется искать.
Вы можете создать полнотекстовый индекс для документов, используя вариацию оператора CREATE FULLTEXT INDEX. На слайде приведен оператор, который создает полнотекстовый индекс для таблицы Production. Document:
CREATE FULLTEXT INDEX ON Production.Document
(
Document TYPE COLUMN FileExtension LANGUAGE 1033
)
KEY INDEX PK_Document_DocumentID ON (AWftsCatalog)
WITH (CHANGE_TRACKING AUTO)
Эта версия очень похожа на оператор CREATE FULLTEXT INDEX для базы данных с одним небольшим отличием. В этой вариации столбец varbinary(max) по имени Document спец��фицирован как включаемый в полнотекстовый индекс. Немедленно за именем столбца следует конструкция TYPE COLUMN, за которой следует столбец, содержащий тип документа. Столбец FileExtension указан в этом экземпляре. Этот столбец содержит типы документа .doc, что означает документ Microsoft Word. Столбец типа особенно важен, поскольку он сообщает SQL Server, какой фильтр должен применяться для извлечения индексируемой информации из документа.
Вы можете запросить представление каталога sys.fulltext_document_types, чтобы получить список всех поддерживаемых типов документов и ассоциированных с ними расширений.
SQL Server 2008 предлагает новые средства для облегчения конфигурации и администрирования iFTS. Ранее в этом докладе было рассмотрено несколько новых средств в iFTS, включая тесную интеграцию с механизмом выполнения запросов SQL, новые ключевые слова T-SQL для полнотекстового каталога, создание и управление полнотекстовыми индексами, а также гибкие новые стоп-слова и управление стоп-списками. В дополнение к хранимым процедурам, представлениям каталога и функциям, SQL Server 2008 предоставляет некоторые специфичные для iFTS функции и представления управления данными.
Хотя доступно несколько хранимых процедур для обратной совместимости с предшествующими версиями SQL Server, большинство из них устарели и не должны использоваться в будущих разработках. Вместо этого необходимо применять эквивалентные операторы T-SQL, представления каталога и динамические управляющие представления. Эти устаревшие средства хорошо документированы в SQL Server Books Online, поэтому мы сосредоточимся вместо этого на новой функциональности SQL Server 2008.
В SQL Server 2008 появились две новых хранимых процедуры для обеспечения управления iFTS:
• процедура sys.sp_fulltext_load_thesaurus_file позволяет перезагрузить файлы тезауруса без необходимости в останове и перезапуске служб;
• процедура sys.sp_fulltext_resetfdhostaccount обновляет имя пользователя Windows и пароль, который SQL Server использует для запуска новой службы демона фильтрации.
Большой проблемой для пользователей, которые применяли FTS в предыдущих версиях SQL Server, был недостаток прозрачности. В основном все, что делал FTS, было скрыто от взгляда, и разработчикам и администраторам приходилось искать неполадки в FTS наощупь. В SQL Server 2008 появились некоторые новые представления каталога и динамические управляющие функции, которые сделали iFTS более прозрачным.
Если вы сталкивались с проблемами производительности запросов iFTS, то представление каталога sys.fulltext_index_fragments может предложить некоторую помощь. В этом представлении каталога SQL Server описывает фрагменты полнотекстового индекса и их состояние. Вы можете использовать эту информацию, чтобы принять решение о реорганизации полнотекстового индекса.
Представления каталога sys.fulltext_stoplists и sys.fulltext_stopwords позволяют просматривать стоп-слова и стоп-списки, определенные пользователями в текущей базе данных. Информация, возвращенная этими представлениями каталога, полезна для поиска причин неполадок с определенными словами, которые игнорируются (или не игнорируются) в полнотекстовых запросах.
Представление каталога sys.fulltext_system_stopwords возвращает строку для каждого стоп-слова в системном стоп-списке, что представляет собой полезную информацию, если вы хотите использовать системный стоп-список в качестве основы для создания ваших собственных стоп-списков.
Функция sys.dm_fts_parser принимает полнотекстовую строку запроса, LCID, ID стоп-списка и установку чувствительности к диакритическим символам. Она возвращает результат, произведенный средствами разделения слов и морфологического поиска, для любого заданного полнотекстового запроса. Эта информация весьма полезна, если требуется выяснить причину неполадки, или когда вы просто хотите лучше разобраться в том, как средства разделения слов и морфологического поиска влияют на передаваемые запросы.
Более подробный вариант этой статьи вы можете посмотреть на сайте:
http://www.techdays.ru/videos/1425.html
А так же рекомендую вашему вниманию следующие материалы:
http://msdn.microsoft.com/en-us/library/cc721269.aspx
http://www.microsoft.com/learning/elearning/course/4332.mspx ://http://www.microsoft.com/learn...4332.mspx
http://www.microsoft.com/learning/en/...cale=en-us
http://www.amazon.com/Pro-Full-Text-S...430215941/