保存的搜索文件格式
在 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>