Сохраненный формат файла поиска

В Windows Vista и более поздних версиях пользователи могут сохранять поисковые запросы в виде папки поиска, созданной XML-файлом, в котором запрос хранится в форме, которую может использовать подсистема поиска Windows. Этот раздел описывает формат файла (*.search-ms) и включает следующие разделы:

Обзор сохраненных поисковых запросов

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

Сохраненный поиск создается из XML-файла (*.search-ms) в папке %userprofile%\Search. Данные делятся на три основных элемента в XML-файле:

  • <viewInfo> указывает сведения о презентации
  • <query> указывает (сведения о запросе поиска
  • <properties> задает свойства самого файла *.search-ms.

В следующем примере показана высокоуровневая структура сохраненного файла поиска.

<?xml version="1.0"?>
<persistedQuery version="1.0">

    <viewInfo ...>
        ...
    </viewInfo>

    <query>
        ...
    </query>

    <properties>
        ...
    </properties>

</persistedQuery>

<элемент viewInfo>

Элемент <viewInfo> указывает, как результаты представляются конечному пользователю. В следующем примере показана структура элемента .

...
    <viewInfo viewMode=""
              iconSize=""
              stackIconSize=""
              autoListFlags=""
              folderFlags=""
              taskFlags=""
              displayName="">

        <visibleColumns>
            <column viewField=""/>
        </visibleColumns>

        <frequentlyUsedColumns>
            <column viewField= ""/>
        </frequentlyUsedColumns>

        <columnChooserColumns >
            <column viewField=""/>
        </columnChooserColumns >

        <groupBy viewField=""
                 direction=""/>

        <stackList>
            <stack viewField=""/>
        </stackList>

        <sortList>
            <sort viewField=""
                  direction=""/>
        </sortList>
    </viewInfo>
...

<Атрибуты viewInfo>

В следующей таблице описаны атрибуты <элемента viewInfo> .

attribute Описание Значения
viewMode Указывает представление папки. Сведения | Значки | Плитки
iconSize Управляет размером значков и эскизов по умолчанию для элементов, если они не стеком. Целое число от 16 до 256
stackIconSize Только для внутреннего использования. Не используйте. Недоступно
displayName Только для внутреннего использования. Не используйте. Недоступно
autoListFlags Только для внутреннего использования. Не используйте. Недоступно
folderFlags Только для внутреннего использования. Не используйте. Недоступно
taskFlags Только для внутреннего использования. Не используйте. Недоступно

<дочерние элементы viewInfo>

Дочерние <элементы элемента viewInfo> указывают, какие столбцы отображаются в результатах поиска Windows Обозреватель, а также способ группировки и сортировки результатов. Каждый дочерний элемент содержит упорядоченный набор столбцов, определяемых каноническими именами системных свойств (например, System.DisplayName). Если в сохраненном файле поиска не определен, результаты поиска будут представлены набором столбцов по умолчанию, соответствующим отображаемым типам файлов.

Элемент Описание Значения
visibleColumns Указывает упорядоченный список столбцов, отображаемых в представлении результатов. Пользователь может изменить этот список. Любое системное свойство.
frequentlyUsedColumns Только для внутреннего использования. Не используйте. Недоступно
columnChooserColumns Только для внутреннего использования. Не используйте. Недоступно
Groupby Задает одно системное свойство, по которому группироваться результаты. Пользователь может изменить это значение. Любое системное свойство.
sortList Указывает упорядоченный список столбцов для сортировки результатов. До четырех системных свойств. Пользователь может изменить этот список.
stackList Только для внутреннего использования. Не используйте. Недоступно

<элемент query>

Элемент <query> задает атрибуты, определяющие, как запрашиваются результаты. В следующем примере показана структура элемента .

...
    <query>
        <providers>
            <provider clsid=""/>    <!-- Do not use -->
        </providers>

        <subQueries>
            <subQuery path=""/>           <!-- Do not use -->
            <subQuery knownSearch=""/>    <!-- Do not use -->
        </subQueries>

        <scope>
            <include path=""        nonRecursive=""/>   <!-- [path of location to include] -->
            <include knownFolder="" nonRecursive=""/>   <!-- Known folder ID  -->
            <exclude path=""        nonRecursive=""/>   <!-- [path of location to exclude] -->
            <exclude knownFolder="" nonRecursive=""/>   <!-- Known folder ID  -->
        </scope>

        <kindList>
            <kind name=""/>     <!-- Kind value -->
        </kindList>

        <conditions>
            <condition type="" ...>     <!-- andCondition | orCondition | notCondition | leafCondition -->
                <attributes>
                    <attribute attributeID="" .../> <!-- Do not use -->
                </attributes>
            </condition>
        </conditions>
    </query>
...

<query> Child Elements

В следующей таблице описаны дочерние элементы <элемента область>.

Элемент Описание Значение
providers Только для внутреннего использования. Не используйте. Недоступно
Подзапросов Только для внутреннего использования. Не используйте. Недоступно
Область Определяет расположения для включения или исключения в поиске. Путь или известный идентификатор папки расположения, который необходимо включить или исключить. Этот элемент также может указать, должен ли поиск включать или исключать дочерние пути (мелкий или глубокий поиск).
kindList Определяет тип файлов для поиска. Любое значение System.Kind.
условия Задает правила фильтрации результатов. Например, результаты могут быть ограничены сообщениями электронной почты, отправленными определенным пользователем или определенным пользователем. andCondition, orCondition, notCondition, leafCondition.

<> Элемент область

Элемент <область> определяет расположения для включения или исключения из поиска. Элемент <область> должен содержать по крайней мере один <дочерний элемент и> ноль или несколько <элементов exclude>. Расположения можно указать как путь (поддерживаются переменные среды) или как известный идентификатор папки. Кроме того, каждое из этих расположений можно указать для глубокого или мелкого поиска, задав для параметра nonRecursive значение true или false (по умолчанию используется рекурсивное значение). Части включенного списка расположений можно исключить, указав элементы exclude.

Ниже показан <элемент область>, который будет выполнять поиск в специальной папке документов, но не в ее дочерних папках, томе "E:" и его дочерних элементах, но не в каталоге "E:\windows" или любом из его дочерних элементов:

...
    <query>
        ...
        <scope>
            <include knownFolder="{FDD39AD0-238F-46AF-ADB4-6C85480369C7}" nonRecursive="true"/>
            <include path="E:\"/>
            <exclude path="E:\Windows" nonRecursive="false"/>
        </scope>
        ...
    </query>
...

<Элемент kindList>

Эти элементы определяют объединение "типа" элементов, которые должны отображаться в библиотеке. Допустимые значения:

  • календарь
  • communication
  • contact
  • документ
  • email
  • feed
  • folder
  • игра
  • instantmessage
  • Журнал
  • link
  • Фильм
  • music
  • Примечание
  • picture
  • программа
  • recordedtv
  • searchfolder
  • задача
  • видео
  • Webhistory
  • элемент
  • иное

<Элемент conditions>

Условия — это фильтры, с которыми сравниваются результаты поиска. Например, можно отфильтровать результаты, которые соответствуют определенным критериям, таким как имя автора или размер файла. Набор условий встроен в единое дерево условий с логическими ветвями AND, OR и NOT.

В следующем примере показана <структура элемента condition> .

...
    <query>
        ...
        <conditions>
            <condition type="" ...>
                <attributes>
                    <attribute attributeID="" .../>
                </attributes>
            </condition>
        </conditions>
    </query>
...

Тип условия может быть одним из следующих:

Тип Описание Доступные атрибуты
andCondition Сочетание двух или более дочерних условий Недоступно
orCondition Дизъюнкция еще двух детских условий Недоступно
NotCondition Отрицание дочернего условия Недоступно
leafCondition Сравнивает свойство со значением property, propertyType, operator, value, valuetype

Атрибуты <элемента leafCondition> определяют свойства и значения, по которых фильтруются результаты.

Пример: <элемент conditions>

В следующем примере результаты фильтрации всех непрочитанных элементов, созданных Джоном. То есть свойство System.IsRead имеет значение false, а строка "john" отображается в свойствах System.Author или System.ItemAuthors.

...
    <query>
        ...
        <conditions>

            <condition type="andCondition">

                <condition type="leafCondition"
                           property="System.IsRead"
                           operator="eq"
                           value="FALSE"/>

                <condition type="orCondition">

                    <condition type="leafCondition"
                               property="System.Author"
                               propertyType="string"
                               operator="wordmatch"
                               value="John"
                               valueType="System.StructuredQueryType.String"/>

                    <condition type="leafCondition"
                               property="System.ItemAuthors"
                               propertyType="string"
                               operator="wordmatch"
                               value="John"
                               valueType="System.StructuredQueryType.String"/>

                </condition>

            </condition>

        </conditions>

    </query>
...

<Элемент properties>

Элемент <properties> описывает свойства самого сохраненного поиска. Сохраненные файлы поиска поддерживают четыре свойства: <author>, <kind>, <description> и <tags>. Они предназначены только для внутреннего использования.

Полная спецификация формата файла search-ms

Ниже приведен пример полного XML-кода для сохраненного файла поиска.

<?xml version="1.0"?>

<persistedQuery version="1.0">

    <!-- The viewInfo section defines how results are displayed to the end user -->
    <viewInfo viewMode=""       <!-- details | icons | tiles -->
              iconSize=""       <!-- Integer -->
              stackIconSize=""  <!-- Do not use -->
              displayName=""    <!-- Do not use -->
              folderFlags=""    <!-- Do not use -->
              taskFlags=""      <!-- Do not use -->
              autoListFlags=""> <!-- Do not use -->

        <visibleColumns>
            <column viewField=""/>  <!-- System.[propertyname] -->
        </visibleColumns>

        <frequentlyUsedColumns>
            <column viewField= ""/> <!-- Do not use -->
        </frequentlyUsedColumns>

        <columnChooserColumns >
            <column viewField=""/>  <!-- Do not use -->
        </columnChooserColumns >

        <groupBy viewField=""       <!-- System.[propertyname] -->
                 direction=""/>     <!-- ascending | descending -->

        <stackList>
            <stack viewField=""/>   <!-- Do not use -->
        </stackList>

        <sortList>
            <sort viewField=""      <!-- System.[propertyname] -->
                  direction=""/>    <!-- ascending | descending -->
        </sortList>
    </viewInfo>

    <!-- The query section defines what gets searched (locations, file kinds) -->
    <query>
        <providers>
            <provider clsid=""/>          <!-- Do not use -->
        </providers>

        <subQueries>
            <subQuery path=""/>           <!-- Do not use -->
            <subQuery knownSearch=""/>    <!-- Do not use -->
        </subQueries>

        <scope>
            <include path=""        nonRecursive=""/>   <!-- [path of location to include] -->
            <include knownFolder="" nonRecursive=""/>   <!-- Known folder ID  -->
            <exclude path=""        nonRecursive=""/>   <!-- [path of location to exclude] -->
            <exclude knownFolder="" nonRecursive=""/>   <!-- Known folder ID  -->
        </scope>

        <kindList>
            <kind name=""/>     <!-- Kind value -->
        </kindList>

        <conditions>
            <condition type="" ...>     <!-- andCondition | orCondition | notCondition | leafCondition -->
                <attributes>
                    <attribute attributeID="" .../> <!-- Do not use -->
                </attributes>
            </condition>
        </conditions>
    </query>

    <!-- The properties section identifies properties of the saved search file itself. -->
    <properties>
        ...             <!-- Do not use -->
    </properties>

</persistedQuery>

Примеры сохраненных поисковых запросов

Ниже приведены примеры файлов *.search-ms.

Последние documents.search-ms

<?xml version="1.0"?>
<persistedQuery version="1.0">
    <viewInfo viewMode="details" iconSize="16">
        <sortList>
            <sort viewField="System.DateModified" direction="descending"/>
        </sortList>
    </viewInfo>

    <query>
        <conditions>
            <condition type="leafCondition" valuetype="System.StructuredQueryType.DateTime" property="System.DateModified" operator="imp" value="R00UUUUUUUUZZXD-30NU" propertyType="wstr" />
        </conditions>
        <kindList>
            <kind name="Document"/>
        </kindList>
        <subQueries>
            <subQuery knownSearch="{4f800859-0bd6-4e63-bbdc-38d3b616ca48}"/>
        </subQueries>
    </query>
</persistedQuery>

Последние music.search-ms

<?xml version="1.0"?>
<persistedQuery version="1.0">
    <viewInfo viewMode="details" iconSize="16">
        <sortList>
            <sort viewField="System.DateModified" direction="descending"/>
        </sortList>
    </viewInfo>

    <query>
        <conditions>
            <condition type="leafCondition" valuetype="System.StructuredQueryType.DateTime" property="System.DateModified" operator="imp" value="R00UUUUUUUUW-1WNNU" propertyType="wstr"/>
        </conditions>
        <kindList>
            <kind name="Music"/>
        </kindList>
        <subQueries>
            <subQuery knownSearch="{4f800859-0bd6-4e63-bbdc-38d3b616ca48}"/>
        </subQueries>
    </query>
</persistedQuery>

Недавно предоставлено Me.search-ms

<?xml version="1.0"?>
<persistedQuery version="1.0">
    <viewInfo viewMode="details" iconSize="16">
        <visibleColumns>
            <column viewField="System.ItemNameDisplay"/>
            <column viewField="System.DateModified"/>
            <column viewField="System.Keywords"/>
            <column viewField="System.SharedWith"/>
            <column viewField="System.ItemFolderPathDisplayNarrow"/>
        </visibleColumns>
        <frequentlyUsedColumns>
            <column viewField="System.Author"/>
            <column viewField="System.Kind"/>
            <column viewField="System.Size"/>
            <column viewField="System.Title"/>
            <column viewField="System.Rating"/>
        </frequentlyUsedColumns>
        <sortList>
            <sort viewField="System.SharedWith" direction="descending"/>
        </sortList>
    </viewInfo>

    <query>
        <conditions>
            <condition type="andCondition">
                <condition type="leafCondition" property="System.IsShared" operator="eq" value="true"/>
                <condition type="leafCondition" property="System.FileOwner" operator="eq" value="[Me]"/>
            </condition>
        </conditions>
        <kindList>
            <kind name="item"/>
        </kindList>
        <scope>
            <include knownFolder="{5E6C858F-0E22-4760-9AFE-EA3317B67173}"/>
            <include knownFolder="{DFDF76A2-C82A-4D63-906A-5644AC457385}"/>
        </scope>
    </query>
</persistedQuery>