如何强制复合索引显示在Google Cloud中?

时间:2016-04-02 13:47:43

标签: java google-app-engine google-cloud-storage google-cloud-platform

好的,请在Google Cloud中查看此图片:

enter image description here

它说" 以下是此应用程序的复合索引。这些索引在您应用的索引配置文件中进行管理。"

请参阅以下代码:

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>

但它仍然无效

1 个答案:

答案 0 :(得分:2)

App Engine数据存储区的索引在these docsthese docs中进行了描述(Java 7,但Java 8的原理相同)。

  1. 复合索引是包含模型的多个属性的索引:例如,通过Model.name对Model进行排序的索引,然后是Model.creationDate。需要按查询描述的顺序访问数据存储记录的查询使用复合索引。
  2. 必须在datastore-indexes.xml文件中声明某些索引 - see here
  3. 服务状态表示该索引已准备就绪;首次上载索引时,App Engine必须构建索引,并且在构建索引之前,使用构建索引的查询将引发异常。因此,在部署需要它们的代码之前,update indexes会很有帮助。
  4. 将您的应用配置为automatically configure indexes