当条目从数据存储中删除时,其相应的搜索文档是否也被删除?

2024-04-20 02:19:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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之前调用。请告知是否有更好的解决方案来维护数据存储和搜索索引之间的对应关系。你知道吗


Tags: to数据方法nameself实体addapi
1条回答
网友
1楼 · 发布于 2024-04-20 02:19:05

由于数据存储(NDB)和搜索API是独立的后端,因此它们需要单独维护。我看到您正在使用key.id()作为文档id。您可以使用此文档id获取或删除文档。维护搜索文档的创建可以在模型的_post_put_hook_post_delete_hook中完成。您也可以使用存储库模式来实现这一点。如何做到这一点取决于你自己。你知道吗

index = search.Index(name='Location_index')
index.delete([doc_id])

相关问题 更多 >