保存的搜索文件格式

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

已保存搜索概述

用户可以将搜索查询另存为“搜索文件夹”,即 Windows 资源管理器中“搜索”文件夹下的虚拟文件夹。 打开搜索文件夹将运行保存的搜索并显示最新结果。 保存的搜索文件以 Windows 搜索可以处理的格式存储查询,指定要搜索的内容、搜索位置以及如何显示结果。

保存的搜索是从 %userprofile%\Search 文件夹中的 XML 文件 (*.search-ms) 生成的。 数据在 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> 元素的属性<。

属性 说明
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>
...

<查询> 子元素

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

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

<scope> 元素

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

下面显示了一个 <scope> 元素,该元素将搜索文档特殊文件夹,但不搜索其子文件夹、“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
  • 文档
  • 电子邮件
  • feed
  • 文件夹
  • 游戏
  • instantmessage
  • 杂志
  • 链接
  • 电影
  • music
  • 备注
  • picture
  • 程序
  • recordedtv
  • searchfolder
  • task
  • 视频
  • webhistory
  • item
  • 其他

<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> 元素

以下示例筛选由 John 创作的所有未读项的结果。 也就是说,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 文件的示例。

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

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