datastore-indexes.xml リファレンス

App Engine では、エンティティの各プロパティに単純なインデックスが事前定義されています。さらに、App Engine アプリケーションでは、datastore-indexes.xml というインデックス設定ファイルでカスタム インデックスを定義できます。アプリケーションをテストしている間、開発用サーバーにより、クエリ実行時にアプリケーションで必要となるインデックス設定の生成を行うことができます。アプリケーションをアップロードする前に datastore-indexes.xml ファイルを編集して、インデックスを手動で調整できます。インデックス設定をデプロイして管理する方法については、データストア インデックスの設定をご覧ください。

以下に、datastore-indexes.xml ファイルの例を示します。

<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes
  autoGenerate="true">
    <datastore-index kind="Employee" ancestor="false">
        <property name="lastName" direction="asc" />
        <property name="hireDate" direction="desc" />
    </datastore-index>
    <datastore-index kind="Project" ancestor="false">
        <property name="dueDate" direction="asc" />
        <property name="cost" direction="desc" />
    </datastore-index>
</datastore-indexes>

構文

<datastore-index> 要素には、以下の要素を含めることができます。

要素 説明
<kind> 必須です。クエリに対応するエンティティの種類です。
<properties>

インデックスの列として並べ替える順に指定したプロパティのリストです。まず、等式フィルタで使用するプロパティ、次に、不等式フィルタで使用するプロパティ、そして並べ替え順序とその方向を指定します。

このリスト内の各要素には、次の要素を指定します。

<name>
プロパティのデータストア名です。
<direction>
並べ替えの方向です。昇順の場合は asc、降順の場合は desc を指定します。この値は、クエリの並べ替え順序で使用するプロパティについてのみ必要です。また、クエリで使用する方向と同じである必要があります。デフォルトは asc です。
<ancestor> クエリに祖先句がある場合は yes です。デフォルトは no です。

自動インデックスと手動インデックス

アプリケーションのクエリで必要になるインデックスを手作業で設定すると、面倒なだけでなく間違えやすくなります。幸いなことに、開発用サーバーでは、インデックスを自動的に設定することができます。インデックスを自動設定するには、属性 autoGenerate="true"WEB-INF/datastore-indexes.xml ファイルの <datastore-indexes> 要素に追加します。インデックスの自動設定は、アプリケーションに datastore-indexes.xml ファイルがない場合でも使用できます。

開発用サーバーでインデックスの自動設定を有効にすると、アプリケーションの war/ ディレクトリに WEB-INF/appengine-generated/datastore-indexes-auto.xml というファイルが作成されます。アプリケーションが開発用サーバーで実行されているときに、アプリケーションが実行しようとしたデータストア クエリに対応するインデックスが datastore-indexes.xmldatastore-indexes-auto.xml のどちらにもない場合は、適切なインデックス設定がサーバーによって datastore-indexes-auto.xml に追加されます。

アプリケーションをアップロードするときに自動インデックス設定が有効になっている場合は、appcfg コマンドの実行時に、そのアプリケーションのためにどのインデックスを本番用に作成する必要があるかが datastore-indexes.xmldatastore-indexes-auto.xml の両方を使用して決定されます。

datastore-indexes.xmlautoGenerate="false" と指定している場合、開発用サーバーと AppCfgdatastore-indexes-auto.xml の内容を無視します。この場合、開発用サーバーで実行されているアプリケーションが、datastore-indexes.xml にインデックスが指定されていないクエリを実行しようとすると、本番用のデータストアと同様に、開発用サーバーから例外がスローされます。

インデックス設定を時には datastore-indexes-auto.xml から datastore-indexes.xml に移動し、インデックスの自動設定を無効にして、アプリケーションを開発用サーバーでテストすることをおすすめします。このようにすると、インデックスの保守が簡単になり、2 つのファイルを管理する必要はなくなります。また、インデックス設定がない場合のエラーをテストで確実に再現できます。

インデックス構成ファイルのデプロイ

datastore-indexes.xml ファイルは、アプリケーションのデフォルト サービスの /WEB-INF/ ディレクトリに配置する必要があります。

現在の提供バージョンを変更せずにデータストア インデックス構成ファイルをデプロイするには、次のコマンドを使用します。

appcfg.sh update_indexes <application root path>

使用されていないインデックスの削除

インデックス構成でインデックスを変更または削除しても、元のインデックスは App Engine から自動的に削除されません。これにより、新しいインデックスを作成しながらアプリの古いバージョンを実行したり、新しいバージョンで問題が発見されたらすぐに古いバージョンを復元したりすることができます。

古いインデックスが不要であると確信できる場合には、次のコマンドを実行して、App Engine から削除することができます。

./appengine-java-sdk/bin/appcfg.sh vacuum_indexes myapp/war
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Java の App Engine スタンダード環境