我对GAE java上的DataStore查询存在问题感到困惑 - 它总是抱怨我没有匹配的索引,即使我有他们在我的datastore-indexes.xml中建议的确切索引 - 可以在把我所有的头发拉出来之前,有些东西会流下来吗?
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>
我的datastore-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()));
如果我理解正确,我需要“api”,“EXPIRED”,“BILLING_ENABLED”和“CREATION”的索引,因为这些索引在查询中使用 - 但是还有什么我需要的吗?
谢谢, 阿德里安
答案 0 :(得分:2)
建议的查询与您的查询略有不同。它必须完全匹配才能工作。只需添加建议的索引作为额外索引,重新部署您的应用程序,然后从应用程序的仪表板上的数据存储索引部分进行检查,如果它在那里并且状态为:服务强>