Java 数据存储索引异常,尽管我已为该异常定义了索引

Java 数据存储索引异常,尽管我已为该异常定义了索引,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我有一个实体king查看,如下属性和值 Review { merchantId : 'X', appId : 'Y', productId : 'Z', reviewId : '12345', timeStamp : '1493482784728', viewtimestamp : '148834892374' } 我对索引的定义如下 <datastore-index kind="review" ancestor="false" source="manual">

我有一个实体king
查看
,如下属性和值

Review {
 merchantId : 'X',
 appId : 'Y',
 productId : 'Z',
 reviewId : '12345',
 timeStamp : '1493482784728',
 viewtimestamp : '148834892374'
}
我对索引的定义如下

<datastore-index kind="review" ancestor="false" source="manual">
        <property name="merchantId" direction="asc"/>
        <property name="appId" direction="asc"/>
        <property name="productId" direction="asc"/>
        <property name="reviewId" direction="asc"/>
        <property name="timeStamp" direction="desc"/>
        <property name="viewtimestamp" direction="desc"/>
    </datastore-index>
SELECT reviewId FROM review WHERE merchantId = X AND appId = Y AND productId = Z;
当我执行这个查询时,我得到以下索引建议

<datastore-index kind="review" ancestor="false" source="manual">
    <property name="appId" direction="asc"/>
    <property name="merchantId" direction="asc"/>
    <property name="productId" direction="asc"/>
    <property name="reviewId" direction="asc"/>
</datastore-index>


我有什么遗漏吗?订单是如何决定的?请帮助

索引不要这样做。如果系统无法找到查询的精确索引,它将不会返回

拥有更复杂的索引并尝试使用该索引为查询提供服务意味着数据存储需要进行一些计算,而不是直接查找。而数据存储并不能做到这一点


如果你想让你的查询通过,你需要为它们建立索引,否则它就无法运行。唯一的区别是,如果没有所有的索引,它可以帮助服务于您的查询。但是你不能只依赖它,因为它不能服务于所有东西,它需要部分索引

索引不是这样工作的。您需要有特定的索引。拥有更大的索引并不意味着子索引将被自动处理。是的,添加了另一个只包含查询字段的索引,它正在工作。因此基于每个查询定义索引是正确的方法?@Pokuri尝试使用索引自动生成,这将为您提供执行您正在测试的任何操作所需的所有索引。@jirungaray是的,我们可以通过启用自动生成来解决这个问题。但我将其标记为false,以使我的团队基于查询编写索引。所以,如果查询在devserver中工作,那么它也可以在云上工作。此外,我还可以清楚地了解datastore-index.xml的修订历史