好的,请在Google Cloud中查看此图片:
它说" 以下是此应用程序的复合索引。这些索引在您应用的索引配置文件中进行管理。"
请参阅以下代码:
public static long getPropertyMaxIDStronglyConsistent(String entityName, String propertyName, Key parentKey){
// Order alphabetically by property name:
//Key parentKey=KeyFactory.createKey(parentEntityName, parentName);
Query q = new Query(entityName, parentKey).setAncestor(parentKey)
.addSort(propertyName, SortDirection.DESCENDING);
//List<Entity> results = datastore.prepare(q).asList(FetchOptions.Builder.withDefaults());
List<Entity> results = datastore.prepare(q)
.asList(FetchOptions.Builder.withLimit(5));
if(results.size()>0){
Entity e=results.get(0);
long maxID=(Long)e.getProperty(propertyName);
return maxID;
}
else{
return 0;
}
}
假设我们正在运行此 function1 getPropertyMaxIDStronglyConsistent("EnglishClass", "ClassNo", KeyFactory.createKey("EnglishClassParent", "EnglishClassParentName"))
。
我发现, function1 如果类型&#34; EnglishClass &#34;没有出现在索引表中,其中包含&#34; 服务&#34;状态。
我不知道自己做了什么但是在我挣扎了几个小时之后突然之间的指数&#34; EnglishClass &#34;出现了。当&#34; EnglishClass &#34;出现在&#34; 服务&#34;状态,应用程序可以正常工作,没有任何问题。
我的问题是
什么是复合索引?
为什么在运行function1后没有立即出现?
什么&#34;服务&#34;状态意味着什么?
如何强制复合索引在Google Cloud中显示?
额外: 在 datastore-indexes-auto.xml 我有
<datastore-indexes autoGenerate="true">
<datastore-index kind="EnglishClass" ancestor="true" source="auto">
<property name="ClassNo" direction="desc"/>
</datastore-index>
</datastore-indexes>
但它仍然无效
答案 0 :(得分:2)
App Engine数据存储区的索引在these docs和these docs中进行了描述(Java 7,但Java 8的原理相同)。