应用程序内容架构
应用程序内容(或 appcontent-ms) Windows 应用的架构使开发人员能够通过向 Windows 搜索索引提供有关应用内容的额外信息,来增强应用内搜索。
工作原理
若要请求 Windows 为应用内搜索索引应用数据,请在LocalFolder下创建一个名为 "Indexed" 的文件夹,并将你要编制索引的文件存储在此处。 Windows 此 "已索引" 文件夹及其所有子文件夹中的文件内容和元数据 (属性) 进行索引。
若要使用 appcontent-ms 架构对有关文件或项的信息编制索引,请创建一个 appcontent 文件,并将其添加到应用的 LocalFolder\Indexed 文件夹中 (需要在运行时执行此操作,然后) 安装应用。 当应用使用Windows 时。存储。搜索api 若要对索引文件夹执行查询,搜索将包含 appcontent 文件中的信息。
仅当包含 appcontent 文件的应用使用 Windows 存储时,才使用中的信息。 搜索API 以执行搜索;例如,此信息不会显示在 Windows UI 或其他应用程序中。
此示例显示了一个简单的 appcontent 文件,该文件描述名为 "Sample 1" 的项。
请注意,该文件包含未由 appcontent-ms 架构定义的元素: IndexerSampleInformation
和 IndexerSampleSpecificElement
。 Appcontent 文件必须有一个根节点,该节点封装要编制索引的所有数据,但您可以将该节点命名为所需的任何内容。
<?xml version="1.0" encoding="utf-8"?>
<IndexerSampleInformation>
<Properties xmlns="http://schemas.microsoft.com/Search/2013/ApplicationContent">
<Name>Sample 1</Name>
<Keywords>
<Keyword xml:lang="en-US">Sample 1 - keyword 1</Keyword>
<Keyword>Sample 1 - keyword 2</Keyword>
</Keywords>
<Comment>Sample 1 comment</Comment>
<AdditionalProperties>
<Property Key="System.Title">Sample 1 Title</Property>
<Property xml:lang="en-US" Key="System.Contact.EmailAddresses">
<Value>bryan@contoso.com</Value>
<Value>vincent@contoso.com</Value>
</Property>
</AdditionalProperties>
</Properties>
<IndexerSampleSpecificElement sc:IndexableContent="true"
xmlns:sc="http://schemas.microsoft.com/Search/2013/ApplicationContent">
The text included here will be indexed, enabling full-text search.
</IndexerSampleSpecificElement>
</IndexerSampleInformation>
甚至可以告诉 Windows 搜索来为任意元素的内容编制索引。 只需使用 IndexableContent 特性告诉搜索来为内容编制索引。 在前面的示例中,Windows Search 将为 IndexerSampleSpecificElement 的内容编制索引,因为IndexableContent属性设置为true:
<IndexerSampleSpecificElement sc:IndexableContent="true"
xmlns:sc="http://schemas.microsoft.com/Search/2013/ApplicationContent">
The text included here will be indexed, enabling full-text search.
</IndexerSampleSpecificElement>
默认情况下,搜索将内容视为文本内容;如果内容为 base64,则使用 " ContentType " 属性指定 MIME 类型。
下一个示例演示如何将 appcontent-ms 文件复制到应用程序的 LocalFolder\Indexed 文件夹。 此代码会将在应用程序的 appcontent-ms 文件夹中找到的所有文件复制到 LocalFolder\Indexed 文件夹。 (您还可以在索引文件夹中直接创建新的 appcontent 文件,而不是从其他位置复制它们。 )
/// <summary>
/// For the purposes of this sample, the appcontent-ms files are stored in an "appcontent-ms" folder in the
/// install directory. These are then copied into the app's "LocalState\Indexed" folder, which exposes them
/// to the indexer.
/// </summary>
public async static Task<string> AddAppContentFilesToIndexedFolder()
{
var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
var installDirectory = Windows.ApplicationModel.Package.Current.InstalledLocation;
var outputString = "Items added to the \"Indexed\" folder:";
var appContentFolder = await installDirectory.GetFolderAsync("appcontent-ms");
var indexedFolder = await localFolder.CreateFolderAsync(
"Indexed", Windows.Storage.CreationCollisionOption.OpenIfExists);
var files = await appContentFolder.GetFilesAsync();
foreach (var file in files)
{
outputString += "\n" + file.DisplayName + file.FileType;
await file.CopyAsync(indexedFolder,
file.Name, Windows.Storage.NameCollisionOption.ReplaceExisting);
}
return outputString;
}
// For the purposes of this sample, the appcontent-ms files are stored in an "appcontent-ms" folder
// in the install directory. These are then copied into the app's "LocalState\Indexed" folder,
// which exposes them to the indexer.
function _addAppContentFilesToIndexedFolder() {
var localFolder = appData.localFolder,
appcontentFolder,
indexedFolder,
installDirectory = Windows.ApplicationModel.Package.current.installedLocation;
var output = "Items added to the \"Indexed\" folder:\n";
installDirectory.getFolderAsync("appcontent-ms").then(function (retrievedAppcontentFolder) {
appcontentFolder = retrievedAppcontentFolder;
return localFolder.createFolderAsync(
"Indexed", Windows.Storage.CreationCollisionOption.openIfExists);
}).then(function (retrievedIndexedFolder) {
indexedFolder = retrievedIndexedFolder;
return appcontentFolder.getFilesAsync(appcontentFolder);
}).then(function (files) {
var promiseArray = [];
for (var i = 0, len = files.length; i < len; i++) {
promiseArray[i] = files[i].copyAsync(indexedFolder,
files[i].name, Windows.Storage.NameCollisionOption.replaceExisting);
output += files[i].displayName + files[i].fileType;
if (i < len - 1) {
output += "\n";
}
}
return WinJS.Promise.join(promiseArray);
}).done(function () {
WinJS.log && WinJS.log(output, "sample", "status");
});
}
有关完整的代码,请参阅 索引器示例。
元素参考
下表列出了此架构中的所有元素,并按名称的字母顺序排序。
元素 | 说明 |
---|---|
AdditionalProperties | 包含描述项的其他属性。 |
注释 | 包含描述项的 系统注释 。 |
关键字 | 描述项的一个系统关键字。 |
关键字 | 包含描述项的 系统关键字 。 |
名称 | \指定该项目的ItemNameDisplay 。 |
属性 | 包含用于描述 Windows 搜索索引项的属性。 |
属性 | 用于描述项的属性。 |
值 | 将为属性编制索引的值。 |
特定于应用的元素的属性
使用这些属性可以在自己的应用特定的 XML 元素中为内容编制索引。
Attribute | 说明 |
---|---|
在元素上设置此属性表示元素的内容被视为指定 MIME 类型/内容类型的 base64 编码,并使用该内容类型的处理程序编制索引。 |
|
指示应为搜索索引元素的文本,但不与属性关联。 请注意,稍后可以基于属性键检索属性,但不能检索文本内容。 |
相关主题