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)
将属性设置为索引属性,然后保存(放置)实体
我知道我发布答案已经很晚了。我想我可以帮助那些可能在这个问题上挣扎的人