アプリのローカル データに対して高度なクエリを実行する方法
アプリで Windows.Storage 名前空間の File API を使って、ローカルに格納されたアプリのデータのファイルに対して高度なクエリを実行する方法について説明します。
Windows ストア アプリで File API を使って、ユーザー ライブラリに格納されているコンテンツに対して高度なクエリを実行することができます。 これは特に、ドキュメント、メール、メディアなどのリッチ コンテンツを管理するアプリで役立ちます。メディアには、写真、音楽、ビデオが含まれます。これらのクエリを使って、ファイル内に格納されたメタデータに対するフル テキスト検索やクエリ ベースのフィルターなどの機能を追加できます。
理解しておく必要があること
テクノロジ
必要条件
- Windows Search サービスを使って、ローカルに格納されたアプリのデータ内のファイルにインデックスを付けます。
手順
ステップ 1: アプリのデータに対する高度なクエリの実行を有効にする
ファイルに対して高度なクエリを実行するには、Windows Search サービスを使ってそれらのファイルにインデックスを付けます。 通常、ローカルに格納されたアプリのデータ内のファイルにはインデックスが付けられません。これは、アプリで高度なクエリ機能が必要でない場合、ファイルにインデックスを付けると不要なパフォーマンス コストが発生するためです。
アプリのデータ内のファイルにインデックスを付けるには、アプリのデータ フォルダーの下に indexed という名前のフォルダーを作る必要があります。その後で、インデックスを付けるコンテンツをそのフォルダーに格納します。Windows Search サービスは、この indexed フォルダーとそのすべてのサブフォルダーに保存されたファイルの内容とメタデータにインデックスを付けます。
アプリのデータ内のファイルにインデックスを付けるには
indexed フォルダーは localFolder の下に配置してください。次に、indexed と localFolder に関する規則をいくつか示します。
indexed フォルダーは、localFolder ルートの下に作る必要があります。
Windows Search サービスは、このフォルダーの下にあるファイルのプロパティとコンテンツにインデックスを付けます。つまり、Windows Search サービスは、このフォルダーまたはそのサブフォルダー内にあるローカル格納されたファイルすべてにインデックスを付けます。
Windows Search サービスでは、HTML、PDF、XML、RTF ファイル形式、Microsoft Office ファイルのファイル形式などに対するフルテキスト インデックス作成とフルテキスト検索がサポートされています。Windows Search サービスのフィルターについて詳しくは、「Windows に付属しているフィルター ハンドラー」をご覧ください。
indexed フォルダーはアプリごとに 1 つだけ作ることができます。
フォルダー名の indexed では、大文字と小文字は区別されません。
アプリ データ フォルダーの名前は、Windows ランタイム API では localFolder ですが、物理ハード ドライブでは LocalState です。テストのためにこのフォルダーにアクセスする場合は、次のフォルダー パスを使います。
%user%\ AppData\Local\Packages\%packageName%\LocalState
indexed フォルダーの下のフォルダー構造は深くしてもかまいませんが、Windows API では、ファイルやフォルダーのパスの長さが MAX_PATH の値 (260 文字) までに制限されます。そのため、indexed フォルダーの下にあるファイルやフォルダーがこの制限を超えないようにする必要があります。MAX_PATH について詳しくは、「パスの最大文字数制限」をご覧ください。
Windows Search サービスが他の場所にインデックスを付ける場合と同じ方法で、ローカルに格納されたデータのみにインデックスを付けます。つまり、indexed フォルダーやそのサブフォルダーでローカルに保存されたファイルのみにインデックスが付けられます。
localFolder の下に indexed フォルダーを作ります。インストール中に indexed フォルダーを作ることはできません。アプリの実行中のみ、フォルダーを作ることができます。次のコード スニペットは、アプリを最初に実行したときに indexed フォルダーを作る方法を示しています。
Windows.Storage.ApplicationData.current.localFolder.createFolderAsync("indexed", Windows.Storage.CreationCollisionOption.openIfExists).then( function (result) { //your code here });
この indexed フォルダーにファイルやフォルダーを格納します。StorageFolder または IStorageFolder を使って、ファイルやフォルダーを格納できます。この indexed フォルダーに格納したファイルとフォルダーはすべて、Windows.Storage 名前空間の File API を使って高度なクエリに利用することができます。
ステップ 2: インデックス付きコンテンツを取得する
Windows Search サービスでアプリ データにインデックスを付けると、File API を使って Windows.Storage 名前空間内のデータを取得できます。たとえば、クエリを実行するには、indexed フォルダーまたは indexed フォルダーの下にある任意の子フォルダーを表す StorageFolder から、CreateFileQuery または CreateFolderQuery を使います。