Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Microsoft Windows Search использует обработчики свойств для извлечения значений свойств из элементов и использует схему системы свойств, чтобы определить, как следует индексировать конкретное свойство. Для чтения и индексирования значений свойств обработчики свойств вызываются внепроцессными средствами поиска Windows для повышения безопасности и надежности. Напротив, обработчики свойств вызываются в процессе проводником Windows для чтения и записи значений свойств.
Этот раздел дополняет раздел системы свойств сведениями, характерными для поиска Windows, и содержит следующие разделы:
- Проектные решения для обработчиков свойств
- написание файлов описания свойств
- Внедрение обработчиков свойств
- Обеспечение индексации ваших предметов
- установка и регистрация обработчиков свойств
- Тестирование и устранение неполадок обработчиков свойств
- Использование обработчиков свойств System-Supplied
- Сопутствующие темы
Решения по проектированию обработчиков свойств
Реализация обработчиков свойств включает в себя следующие действия.
- Принятие решений по проектированию свойств, которые требуется поддерживать.
- Создание файла Описания свойств (.propdesc) для свойств, которые еще не в системе свойств.
- Реализация и тестирование обработчика свойств.
- Установка и регистрация файлов описания свойств и обработчика свойств.
- Тестирование установки и регистрации обработчика свойств.
Прежде чем приступить к работе, необходимо рассмотреть следующие вопросы проектирования:
- Какие свойства поддерживает или должен поддерживать формат файла?
- Эти свойства уже находятся в системной схеме?
- Можно ли использовать существующий обработчик свойств, предоставленный системой?
- Какие свойства можно отобразить конечным пользователям?
- Какие свойства могут изменять пользователи?
- Должна ли поддержка полнотекстового поиска исходить из обработчика свойств или фильтра?
- Нужно ли поддерживать устаревшие приложения? Если да, то что я реализую?
Заметка
Прежде чем продолжить, ознакомьтесь с использование обработчиков свойств System-Supplied, чтобы узнать, можно ли использовать обработчик свойств, предоставленный системой, что позволяет сэкономить время и ресурсы разработки.
После принятия этих решений можно написать формальные описания пользовательских свойств, чтобы система поиска Windows начала индексировать файлы и свойства. Эти формальные описания — XML-файлы, описанные в схемы описания свойств.
Решения о недвижимости
При рассмотрении свойств для поддержки необходимо определить потребности индексирования и поиска пользователей. Например, вы можете определить сотню потенциально полезных свойств для вашего типа файла, но пользователям может быть интересно искать только по нескольким из них. Кроме того, может потребоваться отобразить другую, большую или меньшую группу этих свойств пользователям в проводнике Windows и разрешить пользователям изменять только подмножество этих свойств.
Тип файла может поддерживать любые настраиваемые свойства, которые вы определяете, а также набор системных свойств. Перед созданием настраиваемого свойства просмотрите системные свойства, чтобы узнать, определено ли свойство, которое вы хотите поддерживать, системным свойством. Всегда убедитесь, что вы поддерживаете наиболее важные системные свойства.
Мы рекомендуем использовать матрицу для разработки свойств:
Имя свойства | Можно ли индексировать? | Можно ли отображать? | Можно ли изменить? |
---|---|---|---|
свойство1 | Й | Y | N |
свойство... | Y | У | N |
свойство | N | N | N |
Для каждого из этих свойств необходимо определить, какие атрибуты он должен иметь, а затем описать их формально в XML-файлах описания свойств (.propdesc). Атрибуты включают тип данных свойства, метку, строку справки и многое другое. Для индексируемых свойств следует обратить особое внимание на следующие атрибуты свойств, найденные в элементе searchInfo XML файла описания свойств.
Атрибут | Описание |
---|---|
inInvertedIndex | Необязательный. Указывает, следует ли разбить строковое значение свойства на слова и сохранить каждое слово в инвертированном индексе. Инвертированный индекс позволяет эффективно искать слова и фразы на основе значения свойства с помощью CONTAINS или FREETEXT (например, SELECT ... WHERE CONTAINS "sometext"). Если задано значение FALSE, поиск выполняется по всей строке. Большинство строковых свойств должны быть установлены на TRUE; нестроковые свойства должны быть установлены на FALSE. Значение по умолчанию — FALSE. |
isColumn | Необязательный. Указывает, должно ли свойство храниться в базе данных Поиска Windows в качестве столбца. Хранение свойства в качестве столбца позволяет извлекать, сортировать, группировать и фильтровать (то есть использовать любой предикат, кроме CONTAINS или FREETEXT) во всем значении столбца. Свойства, отображаемые пользователю, должны быть установлены на значение TRUE, если только это не очень большие текстовые свойства (например, текст документа), которые будут индексироваться в инвертированном индексе. Значение по умолчанию — FALSE. |
isColumnSparse | Необязательный. Указывает, занимает ли свойство пространство, если его значение NULL, или не занимает. Свойство без разрежений занимает место для каждого элемента, даже если значение NULL. Если свойство имеет многозначное значение, этот атрибут всегда TRUE. Этот атрибут должен быть FALSE только в том случае, если для каждого элемента присутствует значение. Значение по умолчанию — TRUE. |
тип индекса столбца | Необязательный. Для оптимизации запросов система поиска Windows может создавать вторичные индексы для свойств, имеющих значение isColumn=TRUE. Это требует больше обработки и дискового пространства во время индексирования, но повышает производительность во время запросов. Если свойство обычно сортируется, группируется или фильтруется (то есть используется =, !=, <, >, LIKE, MATCHES) часто пользователями, этот атрибут должен иметь значение OnDisk. Значение по умолчанию — "Не индексируется". Допустимы следующие значения:
|
maxSize | Необязательный. Указывает максимальный размер, допустимый для значения свойства, хранящегося в базе данных поиска Windows. Это ограничение применяется к невидимым элементам вектора, а не к вектору в целом. Значения, превышающие этот размер, усечены. Значение по умолчанию — "128" (байт). В настоящее время поиск Windows не использует maxSize при вычислении объема данных, которые он принимает из файла. Вместо этого ограничение, которое использует Поиск Windows, является произведением размера файла на MaxGrowFactor (размер файла N * MaxGrowFactor), считываемого из реестра по адресу HKEY_LOCAL_MACHINE->Software->Microsoft->Windows Search->Диспетчер сбора данных->MaxGrowFactor. Значение по умолчанию MaxGrowFactor — четыре (4). Следовательно, если тип файла, как правило, меньше общего размера, но имеет более крупные свойства, поиск Windows может не принимать все данные свойств, которые вы хотите вывести. Однако вы можете увеличить MaxGrowFactor в соответствии с вашими потребностями. |
Заметка
Для атрибута columnIndexType преимущество более быстрых запросов должно быть взвешено по сравнению с большими затратами на индексирование и пространство, которые могут нести вторичные индексы. Однако эта стоимость оплачивается только для элементов, которые имеют значение, неnull, поэтому для большинства свойств этот атрибут может иметь значение OnDisk.
поддержка Full-Text
Как правило, полнотекстовый поиск поддерживается компонентами, называемыми фильтрами ; Однако для текстовых типов файлов с неусложными форматами файлов обработчики свойств могут обеспечить эту функциональность с меньшими усилиями разработки. Вы должны просмотреть раздел Full-Text содержимого, чтобы сравнить функции фильтров и обработчиков свойств и помочь вам решить, что лучше всего подходит для вашего типа файла. Особое значение имеет тот факт, что фильтры могут обрабатывать несколько идентификаторов кода языка (LCID) для каждого файла в то время как обработчики свойств не могут.
Заметка
Так как обработчики свойств не могут фрагментировать содержимое таким образом, чтобы фильтры могли, большие файлы (даже если они несложные форматы файлов) должны быть полностью загружены в память.
Рекомендации по реализации операционной системы
Сведения о реализации для Windows 7
В Windows 7 и более поздних версиях при регистрации обработчика свойств, IFilterили нового расширения, наблюдается новое поведение. При установке нового обработчика свойств и (или) IFilter файлы с соответствующими расширениями автоматически переиндексируются.
В Windows 7 рекомендуется установить IFilter в сочетании с соответствующими обработчиками свойств, а также зарегистрировать IFilter перед обработчиком свойств. Регистрация обработчика свойств инициирует немедленное повторное индексирование ранее индексированных файлов без первой перезагрузки и использует преимущества всех ранее зарегистрированных IFilter(s) для индексирования контента.
Если установлен только IFilter без соответствующего обработчика свойств, автоматическое переиндексирование происходит либо после перезапуска службы индексирования, либо перезагрузки системы.
Флаги описания свойств, относящиеся к Windows 7, см. в следующих справочных разделах:
Сведения о реализации для Windows Vista и более ранних версий
До Windows Vista фильтры предоставили поддержку синтаксического анализа и перечисления содержимого и свойств файла. При внедрении системы свойств обработчики свойств обрабатывают свойства файла, а фильтры обрабатывают содержимое файла. Для Windows Vista необходимо разработать только частичную реализацию интерфейса IFilterв координации с обработчиком свойств, как описано в рекомендации по созданию обработчиков фильтров вПоиска Windows.
Хотя система свойств также включена в установку поиска Windows для Windows XP, сторонние и устаревшие приложения могут требовать, чтобы фильтры обрабатывали содержимое и свойства. Поэтому при разработке на платформе Windows XP необходимо предоставить полную реализацию фильтра, а также обработчик свойств для типа файла или пользовательского свойства.
Написание файлов описания свойств
Структура XML-файлов описания свойств (.propdesc) описана в разделе propertyDescription. Особый интерес для поиска представляют атрибуты элемента searchInfo. Когда вы решите, какие свойства поддерживаются, необходимо создать и зарегистрировать файлы описания свойств для каждого свойства. При регистрации файлов .propdesc они включаются в список описания свойств схемы и становятся именами столбцов в хранилище свойств поисковой системы.
Вы можете зарегистрировать описания настраиваемых свойств с помощью функции PSRegisterPropertySchema, которая является API-оболочкой, вызывающей IPropertySystem::RegisterPropertySchema подсистемы схемы. Эта функция информирует подсистему схем о добавлении файлов схемы описания свойств (.propdesc), используя пути к файлам .propdesc на локальном компьютере, как правило, в каталоге установки приложения в "Program Files". Как правило, программа установки или приложения (например, установщик обработчика свойств) вызовет этот метод после установки файлов .propdesc.
Реализация обработчиков свойств
Разработка обработчика свойств включает реализацию следующих интерфейсов:
- IInitialzeWithStream: предоставляет потоковую инициализацию обработчика свойств.
- IPropertyStore: перечисляет, получает и задает значения свойств.
- IPropertyStoreCapabilities: необязательно. Определяет, могут ли пользователи изменять свойство из пользовательского интерфейса.
IInitializeWithStream
Как описано в разделе системы свойств, настоятельно рекомендуется реализовать обработчики свойств с IInitializeWithStream для инициализации на основе потоков. Если вы решили не реализовать IInitializeWithStream, обработчик свойств должен выбрать отказ от выполнения в изолированном процессе, установив флаг DisableProcessIsolation в ключе реестра обработчика свойств. Отключение изоляции процесса обычно предназначено только для устаревших обработчиков свойств и следует категорически избегать в любом новом коде.
IPropertyStore
Чтобы создать обработчик свойств, необходимо реализовать интерфейс IPropertyStore с помощью следующих методов.
Метод | Описание |
---|---|
Совершать | Сохраняет изменение свойства в файл. |
GetAt | Извлекает ключ свойства из массива свойств элемента. |
GetCount | Возвращает количество свойств, присоединенных к файлу. |
GetValue | Извлекает данные для определенного свойства. |
УстановитьЗначение | Задает новое значение свойства или заменяет или удаляет существующее значение. |
Важные рекомендации по реализации этого интерфейса включены в документацию IPropertyStore.
Заметка
Если обработчик свойств выдает несколько значений для одного свойства для заданного элемента, в каталоге хранится только последнее значение.
IPropertyStoreCapabilities
Обработчики свойств могут при необходимости реализовать этот интерфейс, чтобы отключить возможность пользователя изменять определенные свойства. Эти свойства обычно редактируются на странице сведений и области, но их редактирование не допускается в обработчике свойств реализации. Реализация этого интерфейса правильно обеспечивает лучший пользовательский опыт, чем альтернатива — простая ошибка оболочки во время выполнения.
Обеспечение индексации ваших объектов
Теперь, когда вы реализовали обработчик свойств, необходимо убедиться, что элементы, для которых зарегистрирован обработчик, получают индексацию. Вы можете использовать Диспетчер каталогов для начала повторного индексирования, а также можете использовать Диспетчер областей обхода для настройки правил по умолчанию, указывающих URL-адреса, которые вы хотите, чтобы индексатор обходил. Другой вариант — следовать примеру кода ReIndex в примерах кода поиска Windows.
Дополнительные сведения см. в статье Использование диспетчера каталогов и Использование диспетчера областей обхода.
Установка и регистрация обработчиков свойств
После реализации обработчика свойств, его необходимо зарегистрировать и связать расширение имени файла с обработчиком. В следующем примере показаны ключи и значения реестра, необходимые для выполнения этой задачи.
HKEY_CLASSES_ROOT
CLSID
{<CLSID for property handler>}
(Default) = <Property Handler Name>
InProcServer32
(Default) = <full path to property handler dll>
ThreadingModel = <your threading model>
HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Windows
CurrentVersion
PropertySystem
PropertyHandlers
<.fileextention>
(Default) = {<CLSID for property handler>}
Тестирование и устранение неполадок обработчиков свойств
В следующем списке приведены рекомендации по типам тестов, которые необходимо выполнить:
- Проверьте получение выходных данных из каждого отдельного свойства, поддерживаемого типом файла.
- Используйте значения больших свойств, например, используйте большой метатег в HTML-документах.
- Убедитесь, что обработчик свойств не допускает утечки дескрипторов файлов путем редактирования обработчика свойств после получения выходных данных или с помощью таких инструментов, как oh.exe, до и после перечисления свойств файла.
- Проверьте все типы файлов, связанные с обработчиком свойств. Например, проверьте, работает ли фильтр HTML с типами файлов .htm и .html.
- Тестирование с поврежденными файлами. Обработчик свойств должен корректно обрабатывать ошибки.
- Если приложение поддерживает шифрование, проверьте, что обработчик свойств не выводит зашифрованный текст.
- Если обработчик свойств поддерживает полнотекстовый поиск:
- Используйте несколько специальных символов Юникода в содержимом файла и проверьте их выходные данные.
- Проверьте обработку очень больших документов, чтобы убедиться, что обработчик свойств функционирует как ожидалось.
Тесты установки и настройки
Наконец, необходимо протестировать процедуры установки и удаления.
- Установка должна восстанавливаться после неудачных попыток (например, после отмены и последующего перезапуска процесса).
- Все файлы, связанные с обработчиком свойств, должны быть удалены при деинсталляции.
- Удаление не должно удалять файлы, отличные от тех, которые связаны с установкой обработчика свойств.
- Разделы реестра, связанные с обработчиком свойств, должны быть удалены при удалении.
- Удаление должно работать, даже если файлы удаляются из каталога установки.
Устранение неполадок обработчиков свойств
Ниже приведены некоторые распространенные ошибки при разработке обработчиков свойств:
- Установка файлов .propdesc или библиотек DLL в каталоге пользователя.
- Регистрация компонентов с помощью относительных путей.
- Регистрация компонентов в HKEY_CURRENT_USER вместо HKEY_LOCAL_MACHINE.
- Забыв задать DisableProcessIsolation для обработчиков, которые не обрабатывают потоки.
- Размещение тестового файла в неиндексируемом расположении.
Если у вас возникли проблемы с тем, чтобы заставить обработчик свойств работать с индексатором, вот некоторые советы, которые помогут вам устранить неполадки.
- Убедитесь, что описания свойств (.propdesc-файлы) помечены как isColumn="true", isViewable="true", и isQueryable="true" соответствующим образом.
- Убедитесь, что файлы .propdesc находятся в глобальном расположении.
- Убедитесь, что вы зарегистрировали файлы .propdesc, используя абсолютные пути.
- Убедитесь, что журнал событий не записывал ошибки при регистрации файла propdesc.
- Убедитесь, что библиотеки DLL хранятся в глобальном расположении (а не в профиле пользователя).
- Убедитесь, что ваши библиотеки DLL зарегистрированы в HKEY_LOCAL_MACHINE\Software\Classes.
- Убедитесь, что библиотеки DLL зарегистрированы с помощью полных путей (или REG_EXPAND_SZ строк, расширяющихся до абсолютных путей с помощью переменных среды, известных учетной записью системы).
- Убедитесь, что обработчик свойств работает в проводнике Windows.
- Хотя мы рекомендуем использовать IInitializeWithStream, если необходимо использовать IInitializeWithFile или IInitializeWithItem, убедитесь, что укажите DisableProcessIsolation.
- Убедитесь, что панель управления "Параметры индексирования" отображает тип файла в качестве индексированного типа файла.
- Убедитесь, что тестовый файл находится в индексируемом расположении.
- Убедитесь, что тестовый файл был изменен после установки обработчика свойств.
Если тестовый файл находится в индексируемом расположении, а индексатор уже обходил это расположение, необходимо изменить файл каким-то образом, чтобы активировать повторную индексацию файла.
Использование обработчиков свойств System-Supplied
Windows включает ряд системных обработчиков свойств, которые можно использовать, если формат файла совместим. Если вы определите новое расширение файла, использующее один из этих форматов, можно использовать системные обработчики, зарегистрируя идентификатор класса обработчика (CLSID) для расширения файла.
ClSID, указанный в следующей таблице, можно использовать для регистрации обработчиков свойств, предоставленных системой, для типа формата файла.
Формат | CLSID |
---|---|
OLE DocFile | {8d80504a-0826-40c5-97e1-ebc68f953792} |
Сохранение XML игры | {ECDD6472-2B9B-4b4b-AE36-F316DF3C8D60} |
Обработчик XPS/OPC | {45670FA8-ED97-4F44-BC93-305082590BFB} |
XML | {c73f6f30-97a0-4ad1-a08f-540d4e9bc7b9} |
Прежде чем создавать пользовательское свойство, необходимо убедиться, что вместо этого нет системного свойства. Вы можете перечислить системные свойства, вызвав PSEnumeratePropertyDescriptions или с помощью средства командной строки prop.exe.
Системная схема определяет, как эти свойства взаимодействуют с индексатором, и это невозможно изменить. Кроме того, приложение, используемое для создания, редактирования и сохранения типа файла, должно соответствовать определенному поведению. Например, если приложение реализует безопасное сохранение (при котором во время редактирования создается временный файл, а затем ReplaceFile() используется для замены новой версии на старый), он должен передать все свойства из исходного файла в новый файл. Ошибка означает, что файл теряет свойства, добавленные пользователями или другими приложениями.
пример
Ниже показана регистрация предоставленного системой обработчика OLE DocFile для типа файла с расширением .OLEDocFile.
HKEY_CLASSES_ROOT
SystemFileAssociations
.OLEDocFile
shellex
{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}
(Default) = {9DBD2C50-62AD-11d0-B806-00C04FD706EC}
Ниже показана регистрация сведений о списке свойств, чтобы свойства файлов .OLEDocFile отображались на вкладке "Сведения" и в области просмотра.
HKEY_CLASSES_ROOT
SystemFileAssociations
.OLEDocFile
ExtendedTileInfo = prop:System.ItemType;System.Size;System.DateModified;System.Author;System.OfflineAvailability
FullDetails = prop:System.PropGroup.Description;System.Title;System.Subject;
System.Keywords;System.Category;System.Comment;System.PropGroup.Origin;
System.Author;System.Document.LastAuthor;System.Document.RevisionNumber;
System.Document.Version;System.ApplicationName;System.Company;System.Document.Manager;
System.Document.DateCreated;System.Document.DateSaved;System.Document.DatePrinted;
System.Document.TotalEditingTime;System.PropGroup.Content;System.ContentStatus;
System.ContentType;System.Document.PageCount;System.Document.WordCount;
System.Document.CharacterCount;System.Document.LineCount;
System.Document.ParagraphCount;System.Document.Template;System.Document.Scale;
System.Document.LinksDirty;System.Language;System.PropGroup.FileSystem;
System.ItemNameDisplay;System.ItemType;System.ItemFolderPathDisplay;
System.DateCreated;System.DateModified;System.Size;System.FileAttributes;
System.OfflineAvailability;System.OfflineStatus;System.SharedWith;
System.FileOwner;System.ComputerName
InfoTip = prop:System.ItemType;System.Size;System.DateModified;System.Document.PageCoun
PerceivedType = document
PreviewDetails = prop:*System.DateModified;System.Author;System.Keywords;
*System.Size;System.Title;System.Comment;System.Category;
*System.Document.PageCount;System.ContentStatus;System.ContentType;
*System.OfflineAvailability;*System.OfflineStatus;System.Subject;
*System.DateCreated;*System.SharedWith
Связанные разделы
-
Справочник
-
концептуальные
-
Рекомендации по созданию обработчиков фильтров в поиске Windows
-
Свойства System-Defined для пользовательских форматов файлов
-
другие ресурсы