com.google.appengine.api.datastore.DatastoreNeedIndexException : no matching index found.
表示されるようになったのは、ソートを2列で行う記述を追加してから。
query.setOrdering("geohash ASC, date DESC");
どうやらインデックスの設定が必要らしい。
GAE/Jのサイトを見ながらdatastore-indexes.xmlを記述。
参考:Java データストアのインデックスの設定 - Google App Engine - Google Code
datastore-indexes.xmlはwar/WEB-INF下に配置。
ローカルでGAE/Jサーバーを起動すると、war/WEB-INF/appengine-generated下にdatastore-indexes-auto.xmlが自動的に作成される。
この状態になってから、サーバー側へデプロイする。
そうでないとインデックスが作成されず、DatastoreNeedIndexExceptionが解消されない。
しかし、このデプロイ時に
"Deploying xxx to Google" 中に内部エラーが発生しました。 XML error validating xxx\war\WEB-INF\datastore-indexes.xml against C:\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.2.5.v200909021031\appengine-java-sdk-1.2.5\docs\datastore-indexes.xsdというエラーが解決できずにかなり嵌った。
結局、上記のGAE/Jのサイトにはxmlnsが含まれていたのだが、その記述が原因らしい。xmlnsを削除したら解消された。
参考:Issue 1545 - googleappengine - xml error while validating datastore-indexes.xml while deploying to appengine with sdk 1.2.1 - Project Hosting on Google Code
なんだよおー。頼みますよー。
datastore-indexes.xmlもdatastore-indexes-auto.xmlもあって、両ファイルの記述にも違いがないのにまだDatastoreNeedIndexExceptionが出る場合は、GAE/Jの管理パネルの「Datastore」→「Indexes」で作成したインデックスのステータスが「Building」ではなく「Serving」になっているか確認してください。
0 件のコメント:
コメントを投稿