2013-04-25 3 views
1

Я столкнулся с проблемой с моим запросом 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" , и "СОЗДАНИЕ", поскольку они используются в запросе - но есть ли что-нибудь еще, что мне нужно?

Спасибо, Адриан

ответ

2

Предложенный запрос немного отличается от того, что у вас есть. Он должен соответствовать точно, чтобы он работал. Просто добавьте предложенный как дополнительный индекс, как есть, переустановите свое приложение, а затем отметьте из Индексы хранилища данных на панели управления вашей заявки, если он есть и имеет статус: Обслуживание.

+0

Спасибо, что было! Я думал, что дополнительные столбцы в индексе в порядке, но, видимо, он должен быть точно таким же. –