首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >的追溯索引

的追溯索引
EN

Stack Overflow用户
提问于 2014-01-08 23:13:33
回答 2查看 1.1K关注 0票数 9

我的模型中有许多属性,我目前不需要索引,但是可以想象,我可能希望在将来的某个未知点进行索引。如果我现在显式地为一个属性设置indexed=False,但在将来改变主意,那么Datastore会在那个时候自动重建整个索引,包括以前编写的数据吗?采取这种做法还有什么其他影响吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-08 23:22:05

否,将indexed=True更改为indexed=False (反之亦然)只会影响在此之后写入到数据存储的实体。关于它和相关段落的这是文件

类似地,将属性从索引更改为非索引只会影响随后写入数据存储的实体。任何具有该属性的现有实体的索引条目将继续存在,直到更新或删除这些实体为止。若要避免不必要的结果,必须清除代码中的所有按(现在取消索引的)属性进行筛选或排序的查询。

如果稍后决定要开始索引属性,则必须遍历实体并将它们重新放到数据存储中。

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

票数 13
EN

Stack Overflow用户

发布于 2017-07-14 03:36:50

索引现有实体的属性(如文档所示):

  1. 从数据存储检索(获取)实体。
  2. 将实体写回Datastore。

对我不起作用。我使用了appengine-mapreduce库,并使用DatastoreMutationPool编写了一个MapOnlyMapper<Entity, Void>,用于索引Datastore中的所有现有实体。

假设属性name已取消索引,我希望在所有现有实体中索引该属性。我要做的是:

代码语言:javascript
复制
@Override
public void map(Entity value) {
    String property = "name";
    Object existingValue = value.getProperty(property);
    value.setIndexedProperty(property, existingValue);
    datastoreMutationPool.put(value);
}

本质上,您必须使用setIndexedProperty(prop, value)将属性设置为索引属性,然后保存(put)实体。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21008580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档