我正在使用 Google App Engine 的搜索 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 钩子方法来创建一个remove_from_search_index
之前调用的方法put
(用于编辑/更新)和delete
. 请告知是否有更好的解决方案来维护数据存储和搜索索引之间的对应关系。