Разработка обработчиков свойств для поиска Windows

Microsoft Windows Search использует обработчики свойств для извлечения значений свойств из элементов и использует схему системы свойств, чтобы определить, как следует индексировать конкретное свойство. Для чтения и индексирования значений свойств обработчики свойств вызываются внепроцессными средствами поиска Windows для повышения безопасности и надежности. Напротив, обработчики свойств вызываются в процессе Windows Обозреватель для чтения и записи значений свойств.

Этот раздел дополняет раздел "Система свойств" сведениями, характерными для поиска Windows, и содержит следующие разделы:

 

Решения по проектированию обработчиков свойств

Реализация обработчиков свойств включает в себя следующие действия.

  1. Принятие решений по проектированию свойств, которые требуется поддерживать.
  2. Создание файла Описания свойств (.propdesc) для свойств, которые еще не в системе свойств.
  3. Реализация и тестирование обработчика свойств.
  4. Установка и регистрация файлов описания свойств и обработчика свойств.
  5. Тестирование установки и регистрации обработчика свойств.

Прежде чем приступить к работе, необходимо рассмотреть следующие вопросы проектирования:

  • Какие свойства поддерживают формат файла?
  • Эти свойства уже находятся в системной схеме?
  • Можно ли использовать существующий обработчик свойств, предоставленный системой?
  • Какие свойства можно отобразить конечным пользователям?
  • Какие свойства могут изменять пользователи?
  • Должна ли поддержка полнотекстового поиска исходить из обработчика свойств или фильтра?
  • Нужно ли поддерживать устаревшие приложения? Если да, то что я реализую?

Примечание.

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

 

После принятия этих решений можно написать формальные описания пользовательских свойств, чтобы система поиска Windows начала индексировать файлы и свойства. Эти формальные описания являются XML-файлами, описанными в схеме описания свойств.

Решения о свойствах

При рассмотрении свойств для поддержки необходимо определить потребности индексирования и поиска пользователей. Например, вы можете определить сотни потенциально полезных свойств для вашего типа файла, но пользователи могут быть заинтересованы в поиске только по горстке. Кроме того, может потребоваться отобразить другую, большую или меньшую группу этих свойств пользователям в Windows Обозреватель и разрешить пользователям изменять только подмножество этих свойств.

Тип файла может поддерживать любые настраиваемые свойства, которые вы определяете, а также набор системных свойств. Перед созданием настраиваемого свойства просмотрите системные свойства , чтобы узнать, определяется ли свойство, которое вы хотите поддерживать, системным свойством. Всегда убедитесь, что вы поддерживаете наиболее важные системные свойства.

Мы рекомендуем использовать матрицу для разработки свойств:

Имя свойства Можно ли индексировать? Можно ли отображать? Можно ли изменить?
свойство1 Y Y N
Свойство... Y Y N
свойство N N N

 

Для каждого из этих свойств необходимо определить, какие атрибуты он должен иметь, а затем описать их формально в XML-файлах описания свойств (.propdesc). Атрибуты включают тип данных свойства, метку, строку справки и многое другое. Для индексируемых свойств следует обратить особое внимание на следующие атрибуты свойств, найденные в XML-элементе searchInfo файла описания свойств.

Атрибут Description
inInvertedIndex Необязательно. Указывает, следует ли разбить строковое значение свойства на слова и каждое слово, хранящееся в инвертированного индекса. Инвертированные индексы позволяют эффективно искать слова и фразы по значению свойства с помощью CONTAINS или FREETEXT (например, SELECT ... WHERE CONTAINS "sometext"). Если задано значение FALSE, поиск выполняется по всей строке. Большинство строковых свойств должны иметь значение TRUE, а не строковые свойства должны иметь значение FALSE. Значение по умолчанию — FALSE.
isColumn Необязательно. Указывает, должно ли свойство храниться в базе данных Поиска Windows в качестве столбца. Хранение свойства в качестве столбца позволяет извлекать, сортировать, группировать и фильтровать (то есть использовать любой предикат, кроме CONTAINS или FREETEXT) во всем значении столбца. Свойства, отображаемые пользователю, должны иметь значение TRUE , если это не очень большое текстовое свойство (например, текст документа), которое будет искать в инвертированного индекса. Значение по умолчанию — FALSE.
isColumnSparse Необязательно. Указывает, занимает ли свойство место, если значение равно NULL. Свойство, отличное от разрежений, занимает место для каждого элемента, даже если значение равно NULL. Если свойство имеет многозначное значение, этот атрибут всегда имеет значение TRUE. Этот атрибут должен иметь значение FALSE , только если для каждого элемента присутствует значение. Значение по умолчанию — TRUE.
columnIndexType Необязательно. Для оптимизации запросов система поиска Windows может создавать вторичные индексы для свойств, имеющих значение isColumn=TRUE. Это требует больше обработки и дискового пространства во время индексирования, но повышает производительность во время запросов. Если свойство обычно сортируется, группируется или фильтруется (то есть используется =, !=, <, >, LIKE, MATCHES), этот атрибут должен иметь значение OnDisk. Значение по умолчанию — NotIndexed. Допустимы следующие значения:
  • NotIndexed: не создается вторичный индекс.
  • OnDisk: создайте и сохраните вторичный индекс на диске.
Maxsize Необязательно. Указывает максимальный размер, допустимый для значения свойства, хранящегося в базе данных поиска Windows. Это ограничение применяется к невидимым элементам вектора, а не к вектору в целом. Значения, превышающие этот размер, усечены. Значение по умолчанию — "128" (байт).
В настоящее время поиск Windows не использует maxSize при вычислении объема данных, которые он принимает из файла. Вместо этого ограничение используется поискОм Windows, является продуктом размера файла и MaxGrowFactor (размер файла N * MaxGrowFactor) из реестра по адресу HKEY_LOCAL_MACHINE->Software->Microsoft->Windows Search->Gathering Manager->MaxGrowFactor. Значение по умолчанию MaxGrowFactor — четыре (4). Следовательно, если тип файла, как правило, меньше общего размера, но имеет более крупные свойства, поиск Windows может не принимать все данные свойств, которые вы хотите вывести. Однако вы можете увеличить MaxGrowFactor в соответствии с вашими потребностями.

 

Примечание.

Для атрибута columnIndexType преимущество более быстрых запросов должно быть взвешено по сравнению с большими затратами на индексирование и пространство, которые могут нести вторичные индексы. Однако эта стоимость оплачивается только для элементов, имеющих значение, отличное от NULL , поэтому для большинства свойств этот атрибут может иметь значение OnDisk.

 

Поддержка полнотекстовых каталогов

Как правило, полнотекстовый поиск поддерживается компонентами, называемыми фильтрами, однако для типов файлов на основе текста с несложными форматами файлов обработчики свойств могут обеспечить эту функцию с меньшими усилиями разработки. Чтобы решить, что лучше всего подходит для типа файла, ознакомьтесь с разделом "Содержимое полнотекстового содержимого " для сравнения функций обработчика фильтров и свойств. Особое значение имеет тот факт, что фильтры могут обрабатывать несколько идентификаторов кода языка (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 со следующими методами.

Метод Description
Commit Сохраняет свойство, изменяемое в файл.
Getat Извлекает ключ свойства из массива свойств элемента.
GetCount Возвращает количество свойств, присоединенных к файлу.
GetValue Извлекает данные для определенного свойства.
SetValue Задает новое значение свойства или заменяет или удаляет существующее значение.

 

 

 

Важные рекомендации по реализации этого интерфейса включены в документацию по 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.
  • Убедитесь, что параметры индексирования панель управления перечисляют тип файла в качестве индексированного типа файла.
  • Убедитесь, что тестовый файл находится в индексируемом расположении.
  • Убедитесь, что тестовый файл был изменен после установки обработчика свойств.

Если тестовый файл находится в индексируемом расположении, а индексатор уже обходил это расположение, необходимо изменить файл каким-то образом, чтобы активировать повторную индексацию файла.

 

Использование обработчиков свойств, предоставленных системой

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

Процесс индексирования

Разработка обработчиков протоколов

Системные свойства для пользовательских форматов файлов

Другие ресурсы

Система свойств

Свойства системы

Примеры кода поиска Windows