Поиск свойств документа с использованием списков свойств поиска
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure
Ранее содержимое свойств документа нельзя было отличить от содержимого текста документа. Это ограничивало полнотекстовые запросы, позволяя выполнять только поиск во всем документе. Теперь можно настроить полнотекстовый индекс для поддержки поиска по определенным свойствам, например Author и Title, для поддерживаемых типов документов в столбцах двоичных данных varbinary, varbinary(max) (включая FILESTREAM) или image . Такая форма поиска называется поиск свойств.
Связанный фильтр (IFilter) определяет возможность поиска свойств в заданном типе документа. Для некоторых типов документов связанный фильтр IFilter извлекает часть или все свойства, определенные для этого типа документа, а также содержимое текста документа. Можно настроить полнотекстовый индекс, чтобы разрешить поиск только в свойствах, которые извлекаются фильтром IFilter во время полнотекстового индексирования. К фильтрам IFilter, извлекающим ряд свойств документа, относятся фильтры IFilter для типов документов Microsoft Office 2007 (DOCX, XLSX, PPTX и др.). С другой стороны, фильтр IFilter XML не возвращает свойства.
Как работает полнотекстовый поиск со свойствами поиска
Внутренние идентификаторы свойств
Средство полнотекстового поиска произвольным образом назначает каждому зарегистрированному свойству внутренний идентификатор свойства, который действует в пределах данного списка свойств поиска и однозначно определяет свойство в списке. Поэтому, если свойство добавлено в несколько списков свойств поиска, то его внутренний идентификатор скорее всего, будет разным в различных списках.
Когда свойство регистрируется в списке поиска, средство полнотекстового поиска произвольным образом назначает свойству внутренний идентификатор . Внутренний идентификатор свойства — это целое число, однозначно определяющее свойство в пределах списка свойств поиска.
На следующем рисунке показано логическое представление списка свойств поиска, в котором задано два свойства: Title и Keywords. Имя списка свойств для ключевых слов — "Теги". Эти свойства относятся к одному набору свойств, GUID которого F29F85E0-4FF9-1068-AB91-08002B27B3D9. Для свойства Title используется целочисленный идентификатор 2, а для свойства Tags (Keywords) — целочисленный идентификатор 5. Средство полнотекстового поиска произвольным образом сопоставляет каждое свойство с внутренним идентификатором, который уникален в пределах списка свойств поиска. Для свойства Title используется внутренний идентификатор 1, а для свойства Tags — внутренний идентификатор 2.
Внутренний идентификатор свойства, скорее всего, будет отличаться от целочисленного идентификатора этого свойства. Если данное свойство зарегистрировано в нескольких списках свойств поиска, каждому списку свойств поиска может быть назначен отдельный внутренний идентификатор свойств. Например, в одном списке свойств поиска свойство может иметь внутренний идентификатор 4, в другом списке — идентификатор 3 и т. д. Целочисленный же идентификатор свойства, напротив, привязан к свойству и остается одинаковым независимо от места использования свойства.
Индексирование зарегистрированных свойств
После связывания полнотекстового индекса со списком свойств поиска необходимо выполнить повторное заполнение индекса выражениями поиска, относящимися к свойствам индекса. Во время полнотекстового индексирования содержимое всех свойств сохраняется в полнотекстовом индексе вместе с другим содержимым. Однако во время индексирования выражения поиска, обнаруженного в зарегистрированном свойстве, полнотекстовый индексатор сохраняет вместе с выражением соответствующий внутренний идентификатор свойства. Если же свойство не зарегистрировано, то оно сохраняется в полнотекстовом индексе так, как если бы входило в текст документа и имело нулевое значение для внутреннего идентификатора свойства.
На следующем рисунке показано логическое представление отображения выражений поиска в полнотекстовом индексе, который связан со списком свойств поиска, представленным на предыдущем рисунке. Образец "Документ 1" содержит три свойства: Title, Author и Keywords, — а также текст документа. Для свойств Title и Keywords, которые указываются в списке свойств поиска, выражения поиска связываются с соответствующими внутренними идентификаторами свойств в полнотекстовом индексе. Содержимое свойства Author, напротив, индексируется так, как если бы оно входило в текст документа. Это означает, что регистрация свойства несколько увеличивает размер полнотекстового индекса, в зависимости от объема содержимого, хранящегося в свойстве.
Выражения поиска в свойстве Title — Favorite, Biking и Trails — связываются с внутренним идентификатором, назначенным свойству Title для этого индекса (он равен 1). Выражения поиска в свойстве Keywords — biking и mountain — связываются с внутренним идентификатором, назначенным свойству Tags для этого индекса (он равен 2). Для выражений поиска в свойстве Author — Jane и Doe, а также выражений поиска в тексте документа внутренний идентификатор свойства имеет значение 0. Выражение biking встречается в свойстве Title, в свойстве Keywords (Tags) и в тексте документа. Этот документ будет включаться в результаты поиска biking в свойствах Title и Keywords (Tags). Универсальный полнотекстовый запрос выражения biking также будет возвращать этот документ, как и в случае, когда индекс не настроен для поиска в свойствах. Поиск выражения biking в свойстве Author не возвратит этот документ.
В полнотекстовом запросе по свойствам используются внутренние идентификаторы свойств, зарегистрированные в текущем списке свойств поиска для полнотекстового индекса.
Эффект включения поиска свойств
Настройка полнотекстового индекса для поддержки поиска по одному или нескольким свойствам несколько увеличивает размер индекса в зависимости от числа свойств, указанных в списке свойств поиска, и содержимого каждого свойства.
В ходе тестирования типичных корпусов документов Microsoft Word, Excel и PowerPoint полнотекстовый индекс настраивался для индексирования типичных свойств поиска. Индексирование таких свойств увеличивало размер полнотекстового индекса примерно на 5 %. Ожидается, что наблюдаемое увеличение размера будет характерным для большинства корпусов документов. Однако в конечном итоге увеличение размера определяется отношением объема данных свойств в заданном корпусе документов к общему объему данных.
Создание списка свойств поиска и включение поиска свойств
Создание списка свойств поиска
Создание списка свойств поиска с помощью Transact-SQL
Используйте инструкцию CREATE SEARCH PROPERTY LIST (Transact-SQL) и укажите по крайней мере имя списка.
Создание списка свойств поиска в среде Management Studio
В обозревателе объектов разверните узел сервера.
Разверните узел Базы данных, затем разверните базу данных, в которой нужно создать список свойств поиска.
Разверните узел Хранилище, затем щелкните правой кнопкой мыши Списки свойств поиска.
Выберите Создать список свойств поиска.
Введите имя списка свойств.
Дополнительно можно указать владельца списка свойств, отличного от текущего пользователя.
Выберите один из следующих параметров.
Создание пустого списка свойств поиска
Создание на основе существующего списка свойств поиска
Дополнительные сведения см. в статье New Search Property List.
Нажмите ОК.
Добавление свойств в список свойств поиска
Для поиска в свойствах необходимо создать список свойств поиска и указать одно или несколько свойств, доступных для поиска. После добавления свойства в список свойств поиска оно регистрируется для данного списка. Чтобы добавить свойство в список свойств поиска, требуются следующие значения.
Идентификатор GUID набора свойств
Каждое свойство поиска принадлежит одному набору свойств, который содержит группу связанных свойств. Каждый набор свойств определяется идентификатором GUID.
Целочисленный идентификатор свойства
Каждое свойство поиска обладает идентификатором, который уникален в пределах набора свойств. Для заданного свойства идентификатором может быть целое число или строка, однако для полнотекстового поиска поддерживаются только целочисленные идентификаторы.
Имя свойства
Это имя, которое пользователи будут указывать в полнотекстовых запросах для поиска по свойству. Имя свойства может содержать внутренние пробелы. Максимальная длина составляет 256 символов.
Именем свойства может быть любой из следующих объектов.
Каноническое имя Windows для свойства, например System.Author или System.Contact.HomeAddress.
Понятное имя, которое удобно запомнить пользователям. Некоторые свойства связанные с известными понятными именами, например «Автор» или «Домашний адрес», но можно указать имя, которое лучше всего подходит для пользователей.
Примечание.
Заданное сочетание идентификатора GUID набора свойств и идентификатора свойства должно быть уникальным в пределах списка свойств поиска. Это означает, что нельзя добавить одно и то же свойство несколько раз с разными именами или описаниями.
Описание свойства (необязательно)
При добавлении свойства поиска в список свойств поиска можно указать необязательное описание. Например, можно указать для свойства сведения, которые не очевидны по его имени, или описать набор свойств, в который входит свойство.
Получение значений для списка свойств поиска
См. раздел Поиск идентификаторов GUID для наборов свойств и целочисленных идентификаторов свойств для свойств поиска.
Добавление свойства в список свойств поиска с помощью Transact-SQL
Используйте инструкцию ALTER SEARCH PROPERTY LIST (Transact-SQL) со значениями, полученными с помощью одного из методов, описанных в статье, Find Property Set GUID и Целочисленных идентификаторов свойств для свойств поиска.
В следующем примере демонстрируется использование этих значений при добавлении свойства в список свойств поиска:
ALTER SEARCH PROPERTY LIST DocumentTablePropertyList
ADD 'Title'
WITH ( PROPERTY_SET_GUID = 'F29F85E0-4FF9-1068-AB91-08002B27B3D9', PROPERTY_INT_ID = 2,
PROPERTY_DESCRIPTION = 'System.Title - Title of the item.' );
Добавление свойства в список свойств поиска в среде Management Studio
Используйте диалоговое окно Свойства списка свойств поиска для добавления и удаления свойств поиска. Элемент Списки свойств поиска находится в обозревателе объектов в узле Хранение соответствующей базы данных.
Связывание списка свойств поиска с полнотекстовым индексом
Для поддержки поиска по свойствам, зарегистрированным для списка свойств поиска, в полнотекстовом индексе необходимо связать список свойств поиска с индексом и выполнить повторное заполнение индекса. Во время повторного заполнения полнотекстового индекса создаются записи индекса для выражений поиска в каждом из зарегистрированных свойств.
Пока полнотекстовый индекс остается связанным с данным списком свойств поиска, в полнотекстовом запросе можно использовать параметр PROPERTY предиката CONTAINS для поиска по свойствам, которые зарегистрированы для данного списка свойств поиска.
Если изменить список свойств поиска, связанный с полнотекстовым индексом, то необходимо перестроить индекс, чтобы обеспечить согласованное состояние. Этот индекс немедленно усекается и остается пустым до запуска полного заполнения. Дополнительные сведения об изменении списка свойств поиска приводит к перестроению индекса, см. в разделе "Примечания" в ALTER FULLTEXT INDEX (Transact-SQL).
Связывание списка свойств поиска с полнотекстовым индексом с помощью Transact-SQL
Используйте инструкцию ALTER FULLTEXT INDEX (Transact-SQL) с предложением SET SEARCH PROPERTY LIST = <property_list_name>
.
Связывание списка свойств поиска с полнотекстовым индексом с помощью среды Management Studio
Укажите значение Список свойств поиска на странице Общие диалогового окна Свойства полнотекстового индекса .
Запрос свойств поиска с ключевым словом CONTAINS
Далее представлен базовый синтаксис CONTAINS для полнотекстового запроса по свойствам:
SELECT column_name FROM table_name
WHERE CONTAINS ( PROPERTY ( column_name, 'property_name' ), '<contains_search_condition>' )
Например, следующий запрос выполняет поиск по индексированному свойству Title
в столбце Document
таблицы Production.Document
в базе данных AdventureWorks
. Запрос возвращает только те документы, свойство Title
которых содержит строку Maintenance
или Repair
USE AdventureWorks2022;
GO
SELECT Document FROM Production.Document
WHERE CONTAINS ( PROPERTY ( Document, 'Title' ), 'Maintenance OR Repair')
GO
В этом примере предполагается, что фильтр IFilter для документа извлекает свойство Title, это свойство добавляется в список свойств поиска, а этот список связывается с полнотекстовым индексом.
Управление списками свойств поиска
Просмотр и изменение списка свойств поиска
Изменение списка свойств поиска с помощью Transact-SQL
Используйте инструкцию ALTER SEARCH PROPERTY LIST (Transact-SQL) для добавления или удаления свойств поиска.
Просмотр и изменение списка свойств поиска в среде Management Studio
В обозревателе объектов разверните узел сервера.
Раскройте узел Базы данных, а затем — соответствующую базу данных.
Разверните Хранилище.
Разверните Списки свойств поиска для отображения списков свойств поиска.
Щелкните правой кнопкой мыши список свойств и выберите Свойства.
В диалоговом окне Редактор списка свойств поиска для добавления или удаления свойств поиска используйте сетку свойств:
Чтобы удалить свойство документа, щелкните заголовок строки слева от свойства и нажмите кнопку DEL.
Чтобы добавить свойство документа, щелкните пустую строку в конце списка, справа от *, и введите значения для нового свойства.
Описание этих значений см. в разделе Редактор списка свойств поиска. Сведения о способе получения этих значений для свойств, определенных корпорацией Майкрософт, см. в разделе Поиск идентификаторов GUID наборов свойств и целочисленных идентификаторов свойств для свойств поиска. Дополнительные сведения о свойствах, определенных независимыми поставщиками программного обеспечения (ISV), см. в документации по этим поставщикам.
Нажмите ОК.
Удаление списка свойств поиска
Нельзя удалить из базы данных список свойств поиска, связанный с каким-либо полнотекстовым индексом.
Удаление списка свойств поиска с помощью Transact-SQL
Используйте инструкцию DROP SEARCH PROPERTY LIST (Transact-SQL).
Удаление списка свойств поиска в среде Management Studio
В обозревателе объектов разверните узел сервера.
Раскройте узел Базы данных, а затем — соответствующую базу данных.
Разверните узел Хранилище, затем узел Списки свойств поиска .
Щелкните правой кнопкой мыши список свойств, который необходимо удалить, и выберите пункт Удалить.
Нажмите ОК.
См. также
Поиск идентификаторов GUID для наборов свойств и целочисленных идентификаторов свойств для свойств поиска
Настройка и управление фильтрами для поиска