com.google.appengine.api.datastore.DatastoreNeedIndexException:找不到匹配的索引

时间:2014-02-22 11:12:49

标签: java google-app-engine objectify

当我使用Objectify部署我的Google App Engine服务器APP时出现以下异常,尽管我已经配置了应用程序的所有索引。仍然不明白为什么我得到这个例外,由于这个错误,我无法在这个Web应用程序上做任何事情。

生产服务器中的异常

/search
com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found.
The suggested index for this query is:
<datastore-index kind="M_TAXI" ancestor="false" source="manual">
    <property name="cityName" direction="asc"/>
    <property name="updatedOn" direction="asc"/>
</datastore-index>

datastore.indexes.xml

<?xml version="1.0" encoding="UTF-8"?>
<datastore-indexes autoGenerate="true">
<datastore-index kind="M_COUNTRY" ancestor="false" source="auto">
 <property name="countryCode" direction="asc" />
 <property name="countryName" direction="asc" />
 <property name="active" direction="asc" />
</datastore-index>
<datastore-index kind="M_CITY" ancestor="false" source="auto">
 <property name="countryCode" direction="asc" />
 <property name="cityName" direction="asc" />
 <property name="cityCode" direction="asc" />
 <property name="active" direction="asc" />
</datastore-index>
<datastore-index kind="M_TAXI" ancestor="false" source="auto">
 <property name="cityName" direction="asc" />
 <property name="supplierUserName" direction="asc" />
 <property name="updatedOn" direction="asc" />
 <property name="active" direction="asc" />
 <property name="countryName" direction="asc" />
</datastore-index>
</datastore-indexes>

来自生产服务器的数据存储索引图像快照

Datastore index image snapshot

2 个答案:

答案 0 :(得分:4)

抛出异常的查询无法使用现有的M_TAXI。请尝试插入

<datastore-index kind="M_TAXI" ancestor="false" source="manual">
    <property name="cityName" direction="asc"/>
    <property name="updatedOn" direction="asc"/>
</datastore-index>

在&lt; / datastore-indexes&gt;之前的datastore.indexes.xml中结束标记,并在另一个M_TAXI元素之后,并报告结果是什么。

答案 1 :(得分:3)

您必须在datastore.indexes.xml

中添加这些索引
<datastore-index kind="M_TAXI" ancestor="false" source="manual">
    <property name="cityName" direction="asc"/>
    <property name="updatedOn" direction="asc"/>
</datastore-index>

由于Appengine数据存储区是无模式的,因此您必须为不同的查询添加单独的索引。

请参阅此stackoverflow post