保存的搜索文件格式

在 Windows Vista 及更高版本中,用户可以将搜索另存为搜索文件夹,该文件由 XML 文件生成,该文件以Windows搜索子系统可以使用的表单存储查询。 本主题介绍文件格式 (*.search-ms) ,包含以下部分:

已保存搜索概述

用户可以将搜索查询另存为搜索文件夹,该文件夹显示在搜索文件夹下的Windows资源管理器中。 打开搜索文件夹会运行保存的搜索并显示最新的结果。 保存的搜索文件以Windows搜索可以执行的操作、指定要搜索的内容、搜索位置以及如何呈现结果的格式存储查询。

保存的搜索是从 %userprofile%\Search 文件夹中的 XML 文件 (*.search-ms) 生成的。 数据分为 XML 文件中的三个主要元素:

  • <viewInfo> 指定演示文稿信息
  • <query> 指定 (搜索查询信息
  • <属性> 指定 *.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> 元素的属性<。

属性 说明
viewMode 指定文件夹视图。 详细信息|图标|瓷砖
iconSize 在不使用堆栈时控制项目图标和缩略图的默认大小。 介于 16 和 256 之间的整数
stackIconSize 仅供内部使用。 请勿使用。 不适用
displayName 仅供内部使用。 请勿使用。 不适用
autoListFlags 仅供内部使用。 请勿使用。 不适用
folderFlags 仅供内部使用。 请勿使用。 不适用
taskFlags 仅供内部使用。 请勿使用。 不适用

<viewInfo> 子元素

viewInfo> 元素的<子元素指定Windows资源管理器搜索结果中显示的列以及结果分组和排序方式。 每个子元素都包含一组有序的列,这些列由系统属性的规范名称标识 (,例如 System.DisplayName) 。 如果未在保存的搜索文件中定义,则搜索结果将显示一组适合所显示的文件类型的默认列。

元素 描述
visibleColumns 指定要在结果视图中显示的列的有序列表。 用户可以更改此列表。 任何系统属性。
frequentlyUsedColumns 仅供内部使用。 请勿使用。 不适用
columnChooserColumns 仅供内部使用。 请勿使用。 不适用
groupBy 指定要对其结果进行分组的单个系统属性。 用户可以更改此值。 任何系统属性。
sortList 指定要按其排序结果的列的有序列表。 最多四个系统属性。 用户可以更改此列表。
stackList 仅供内部使用。 请勿使用。 不适用

<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>
...

<查询> 子元素

下表描述了 scope> 元素的<子元素。

元素 描述
providers 仅供内部使用。 请勿使用。 不适用
subQueries 仅供内部使用。 请勿使用。 不适用
范围 标识要包括在搜索中或排除的位置。 要包含或排除的位置的路径或 已知文件夹 ID 。 此元素还可以指定搜索是否应包括/排除子路径, (浅搜索还是深度搜索) 。
kindList 标识要搜索的文件类型 (s) 。 任何 System.Kind 值。
条件 指定筛选结果的规则。 例如,结果可能仅限于由特定人员或特定人员发送的电子邮件。 andCondition, orCondition, notCondition, leafCondition.

<scope> 元素

<scope> 元素标识要包括或排除在搜索中的位置。 <scope> 元素必须至少包含一个<包含>子元素,并且包含零个或多个<排除>元素。 这些位置可以指定为) 或 已知文件夹标识符 (环境变量的路径。 此外,可以通过将非递归设置为“true”或“false”, (默认值为递归) 来指定要深入或浅层搜索这些位置。 可以通过指定排除元素来排除包含的位置列表的各个部分。

下面显示了一个 <范围> 元素,该元素将搜索文档特殊文件夹,但不搜索其子文件夹、“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> 元素

这些元素定义应在库中显示的项的“kind”联合。 有效值为:

  • 日历
  • communication
  • contact
  • 文档
  • 电子邮件
  • feed
  • 文件夹
  • 游戏
  • instantmessage
  • 杂志
  • 链接
  • 电影
  • music
  • 备注
  • picture
  • 程序
  • recordedtv
  • searchfolder
  • task
  • 视频
  • webhistory
  • item
  • 其他

<conditions> 元素

条件是与搜索结果进行比较的筛选器。 例如,可以筛选满足某些条件的结果,例如作者名称或文件大小。 条件集内置于具有逻辑 AND、OR 和 NOT 分支的单个条件树中。

下面的示例演示条件>元素的结构<。

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

条件类型可以是下列条件之一:

类型 描述 可用属性
andCondition 结合两个或多个子条件 不适用
orCondition 取消两个更多儿童条件 不适用
notCondition 否定子条件 不适用
leafCondition 将属性与值进行比较 property, propertyType, 运算符, 值, 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> 元素描述保存的搜索本身的属性。 保存的搜索文件支持四个属性: <作者>、 <类型>、 <说明>和 <标记>。 这些仅供内部使用。

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>

最近音乐.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>