В случае, если при запросе у вас используется несколько условий, то GAE требует наличия индексов, другими словами, вот такой вот запрос отработает без индексов:
1 | SELECT * FROM HyperLink WHERE param1 == 1 |
А вот такой потребует создания индекса:
1 | SELECT * FROM HyperLink WHERE param1 == 1 && param2 == 2 |
Если вы программируете на Java, то, при локальной разработке, как только сервер выполнит запрос и обнаружит в нём два условия, то сгенерирует xml файл datastore-indexes-auto.xml примерно такого содержания:
1 2 3 4 5 6 7 8 9 10 | <!-- Indices written at Sat, 8 Jan 2011 11:58:41 UTC --> <datastore-indexes> <!-- Used 2 times in query history --> <datastore-index source="auto" ancestor="true" kind="HyperLink"> <property direction="asc" name="param2"></property> </datastore-index> </datastore-indexes> |
Локально всё будет работать, но после deployment — com.google.appengine.api.datastore.DatastoreNeedIndexException. WTF!?
Оказывается, надо дописать в этот файл параметр autoGenerate=»true». Вот так:
1 2 3 4 5 6 7 8 9 10 | <!-- Indices written at Sat, 8 Jan 2011 11:58:41 UTC --> <datastore-indexes autogenerate="true"> <!-- Used 2 times in query history --> <datastore-index source="auto" ancestor="true" kind="HyperLink"> <property direction="asc" name="param2"></property> </datastore-index> </datastore-indexes> |
Попробуйте обратить на это внимание при первом прочтении документации. Даже при втором.
Свежие комментарии