我正在使用googleappengine的Search API索引数据存储中的实体。创建或修改对象后,必须将其添加到搜索索引中。为此,我为每个实体被索引的模型创建一个add_to_search_index
方法,例如:
class Location(ndb.Model):
...
def add_to_search_index(self):
fields = [
search.TextField(name="name", value=self.name),
search.GeoField(name="location", value= search.GeoPoint(self.location.lat, self.location.lon)),
]
document = search.Document(doc_id=str(self.key.id()), fields=fields)
index = search.Index(name='Location_index')
index.put(document)
搜索API是否自动维护索引文档和数据存储实体之间的任何对应关系?你知道吗
我怀疑它们不是,这意味着搜索API将在其索引中维护已删除、过时的实体。如果是这种情况,那么我认为最好的方法是使用NDB hook methods创建一个remove_from_search_index
方法,该方法在put
(用于编辑/更新)和delete
之前调用。请告知是否有更好的解决方案来维护数据存储和搜索索引之间的对应关系。你知道吗
由于数据存储(NDB)和搜索API是独立的后端,因此它们需要单独维护。我看到您正在使用
key.id()
作为文档id。您可以使用此文档id获取或删除文档。维护搜索文档的创建可以在模型的_post_put_hook
和_post_delete_hook
中完成。您也可以使用存储库模式来实现这一点。如何做到这一点取决于你自己。你知道吗相关问题 更多 >
编程相关推荐