Я столкнулся с проблемой с моим запросом DataStore в GAE java - он всегда жалуется, что у меня нет соответствующего индекса, хотя у меня есть точный индекс, который они предложили в моем хранилище данных, indexes.xml - может ли что-то пролить некоторый свет, прежде чем вытащить все мои волосы?DatastoreNeedIndexException даже после определения индекса
com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found.
The suggested index for this query is:
<datastore-index kind="Users" ancestor="false" source="manual">
<property name="BILLING_ENABLED" direction="asc"/>
<property name="EXPIRED" direction="asc"/>
<property name="api" direction="asc"/>
<property name="CREATION" direction="asc"/>
</datastore-index>
Мой хранилищу-indexes.xml
<datastore-indexes autoGenerate="true">
<datastore-index kind="Users" ancestor="false" source="manual">
<property name="BILLING_ENABLED" direction="asc"/>
<property name="EXPIRED_DATE" direction="asc"/>
<property name="EXPIRED" direction="asc"/>
<property name="api" direction="asc"/>
<property name="CREATION" direction="asc"/>
</datastore-index>
</datastore-indexes>
Мой запрос:
Query q = new Query("Users"); Filter filter = CompositeFilterOperator.and(new FilterPredicate("api", Query.FilterOperator.EQUAL, "val"), new FilterPredicate(EXPIRED, Query.FilterOperator.EQUAL, Boolean.FALSE)); filter = CompositeFilterOperator.and(filter, new FilterPredicate("BILLING_ENABLED", Query.FilterOperator.EQUAL, Boolean.FALSE)); filter = CompositeFilterOperator.and(filter, new FilterPredicate("CREATION", Query.FilterOperator.LESS_THAN_OR_EQUAL, cal.getTime()));
Если я правильно понимаю, мне нужно индексы для "апи", "EXPIRED", "BILLING_ENABLED" , и "СОЗДАНИЕ", поскольку они используются в запросе - но есть ли что-нибудь еще, что мне нужно?
Спасибо, Адриан
Спасибо, что было! Я думал, что дополнительные столбцы в индексе в порядке, но, видимо, он должен быть точно таким же. –