Google app engine Google云数据存储中的追溯索引

Google app engine Google云数据存储中的追溯索引,google-app-engine,indexing,google-cloud-datastore,Google App Engine,Indexing,Google Cloud Datastore,我的模型中有许多属性目前不需要编制索引,但可以想象,我可能希望在将来的某个未知点编制索引。如果我现在为属性显式设置了index=False,但后来改变了主意,那么数据存储是否会在此时自动重建整个索引,包括以前写入的数据?采用这种方法还有其他影响吗?否,将index=True更改为index=False(反之亦然)只会影响在该点之后写入数据存储的实体。关于它和相关段落: 类似地,将属性从索引更改为未索引只会影响随后写入数据存储的实体。具有该属性的任何现有实体的索引项将继续存在,直到这些实体被更新或

我的模型中有许多属性目前不需要编制索引,但可以想象,我可能希望在将来的某个未知点编制索引。如果我现在为属性显式设置了
index=False
,但后来改变了主意,那么数据存储是否会在此时自动重建整个索引,包括以前写入的数据?采用这种方法还有其他影响吗?

否,将index=True更改为index=False(反之亦然)只会影响在该点之后写入数据存储的实体。关于它和相关段落:

类似地,将属性从索引更改为未索引只会影响随后写入数据存储的实体。具有该属性的任何现有实体的索引项将继续存在,直到这些实体被更新或删除。为了避免不必要的结果,必须清除代码中按(现在未索引)属性过滤或排序的所有查询

如果您以后决定要开始索引属性,则必须检查实体并将其重新放入数据存储中

但是,请注意,将特性从未索引更改为索引不会影响更改之前创建的任何现有实体。对属性进行筛选的查询不会返回此类现有实体,因为实体在创建时未写入查询的索引。要使实体可供将来的查询访问,必须将它们重写到数据存储中,以便将它们输入到适当的索引中。也就是说,您必须为每个现有实体执行以下操作:

从数据存储中检索(获取)实体

将实体写(放)回数据存储


要索引现有实体的属性(根据文档):

  • 从数据存储中检索(获取)实体
  • 将实体写(放)回数据存储
  • 不适合我。我使用
    appengine-mapreduce
    库,并使用
    DatastoreMutationPool
    编写了一个
    MapOnlyMapper
    来索引数据存储中的所有现有实体

    假设属性
    name
    未编制索引,我想在所有现有实体中为其编制索引。我要做的是:

    @Override
    public void map(Entity value) {
        String property = "name";
        Object existingValue = value.getProperty(property);
        value.setIndexedProperty(property, existingValue);
        datastoreMutationPool.put(value);
    }
    
    本质上,您必须使用
    setIndexedProperty(prop,value)
    将属性设置为索引属性,然后保存(放置)实体

    我知道我发布答案已经很晚了。我想我可以帮助那些可能在这个问题上挣扎的人