1

看起来像 - 至少现在 - 我必须手动保持搜索索引与数据存储同步。如果我每次在数据存储中更改某些内容时都重建索引,那么我认为我会遇到配额问题,所以我认为创建一个cron作业来定期重建索引会更好。我应该多久重建索引以避免遇到配额问题?我应该多久重建一次我的App Engine搜索索引(全文搜索)?

+1

如何构建你的数据?你在搜索索引中存储什么?你如何将它存储在索引中?你使用python/java吗?如果Python使用'db'或'ndb'?有很多需要的信息。如果你不得不重新创建你的搜索索引,每次更改都会造成错误... – aschmid00 2013-03-04 17:01:40

+0

对不起,我想我对全文搜索API的工作原理没有很好的理解。它是一个Python应用程序。我正在使用'db'和HRD。谢谢你的帮助。 – 2013-03-04 18:19:10

+0

和你在搜索api中存储什么?我强烈建议你在任何情况下都使用'ndb'而不是'db'。它有很多很好的部分db缺失。 – aschmid00 2013-03-04 18:35:33

回答

4

使用ndb为模型,你有Model Hooks后,将它们与_post_put_hook后索引实体。

例如:

class MyModel(ndb.Model): 
    title = ndb.StringProperty() 

    def _post_put_hook(self, future): 
     fields = [search.TextField(name='title', value=self.title)] 
     doc = search.Document(doc_id=self.key.id(), fields=fields) 
     search.Index('index-name').put(doc) 
     ... 

https://developers.google.com/appengine/docs/python/ndb/modelclass#Model__post_put_hook

+0

因此,清楚的是,无论何时更新数据存储项目,它都会自动更新数据存储项目各自的搜索索引条目? – 2013-03-19 17:35:36

+0

是,如果您使用唯一标识符作为搜索文档密钥。所以每次更新实体时,都会用特定的doc_id覆盖searchdoc。 – aschmid00 2013-03-19 18:33:21

+0

,当然你应该在删除实体时删除搜索文档。显然带着'_post_delete_hook' – aschmid00 2013-03-19 19:21:27