如何在应用本地数据上执行富查询

[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]

了解应用如何使用 Windows.Storage 命名空间中的文件 API 来对照应用的本地存储数据中的文件执行丰富的查询。

Windows 应用商店应用可以使用文件 API 来对照用户库中存储的内容执行丰富的查询。 这对于管理丰富内容(如文档、邮件或媒体)的应用特别有价值。媒体可能包括照片、音乐和视频。你可以使用这些查询来添加功能,例如,针对存储在文件中的元数据执行全文搜索和基于查询的筛选。

你需要了解的内容

技术

先决条件

说明

步骤 1: 为应用数据启用富查询

若要提供针对文件的富查询,则可以使用 Windows 搜索服务为这些文件编制索引。 通常,不为应用的本地存储数据中的文件编制索引。这是由于编制索引需要降低性能,当应用不需要丰富查询功能时,没有必要这样做。

若要允许为应用数据内的文件编制索引,必须在应用的数据文件夹下面创建一个名为 indexed 的文件夹。然后,将你希望为其编制索引的内容存储到该文件夹中。Windows 搜索服务会为此 indexed 文件夹及其所有子文件夹中的文件内容和元数据编制索引。

JJ835814.wedge(zh-cn,WIN.10).gif允许对应用数据内的文件编制索引

  1. 规划要位于 localFolder 下的 indexed 文件夹。下面是有关 indexedlocalFolder 的一些规则。

    • indexed 文件夹必须在 localFolder 根目录下创建。

    • Windows 搜索服务为此文件夹及其所有级别的子文件夹的文件属性和内容编制索引。也就是说,Windows 搜索服务为在本地存储在此文件夹或其子文件夹(包括所有级别的子文件夹)中的所有文件编制索引。

      Windows 搜索服务为 HTML、PDF、XML 和 RTF 文件格式以及 Microsoft Office 文件格式等提供全文索引和搜索支持。有关 Windows 搜索服务的筛选器的信息,请参阅随 Windows 提供的筛选器处理程序

    • 每个应用中只能有一个 indexed 文件夹。

    • 文件夹名 indexed 不区分大小写。

    • 尽管应用数据文件夹在 Windows 运行时 API 中的名称为 localFolder,但是它在物理硬盘驱动器上的名称为 LocalState。如果你想要访问此文件夹以进行测试,请使用以下文件夹路径:

      %user%\ AppData\Local\Packages\%packageName%\LocalState
      
    • indexed 文件夹下的文件夹结构可能会很深,但是 Windows API 不允许文件或文件夹的路径长度大于 MAX_PATH(该属性定义为 260 个字符)。因此,你需要确保 indexed 文件夹下的文件或文件夹不超过此限制。有关 MAX_PATH 的详细信息,请参阅最大路径长度限制

    • Windows 搜索服务为其他位置编制索引的方式相似,Windows 搜索服务仅为本地存储数据编制索引。换言之,仅为本地存储在 indexed 文件夹或其子文件夹中的文件编制索引。

  2. localFolder 下创建 indexed 文件夹。不能在安装期间创建 indexed 文件夹。只能在应用运行时创建它。下面的代码片段显示如何在首次运行应用时创建 indexed 文件夹:

    
    Windows.Storage.ApplicationData.current.localFolder.createFolderAsync("indexed", 
        Windows.Storage.CreationCollisionOption.openIfExists).then(
                    function (result) {
                       //your code here
                    });
    
  3. 将你的文件和文件夹存储在此 indexed 文件夹中。你可以使用 StorageFolderIStorageFolder 存储文件和文件夹。存储在此 indexed 文件夹中的所有文件和文件夹随后将可供借助于 Windows.Storage 命名空间中的文件 API 执行的丰富查询使用。

步骤 2: 提取索引内容

Windows 搜索服务为应用数据编制索引之后,应用可以通过 Windows.Storage 命名空间中的文件 API 获取数据。例如,若要执行查询,请使用 StorageFolder(代表 indexed 文件夹或 indexed 文件夹下的任何子文件夹)中的 CreateFileQueryCreateFolderQuery

相关主题

Windows.Storage

Windows 搜索服务

StorageFolder

IStorageFolder

ApplicationData.localFolder

IFilter