【发布时间】:2014-06-14 09:07:52
【问题描述】:
在我的应用程序中,我有一个名为 Product 的实体,其中包含
要在网站上显示的产品列表。由于名称(标题)和
产品描述需要全文搜索,我将它们放入
一个单独的 Document(由 Google 的 App Engine Search API 定义)。所有其他
属性保留在Product 实体中,该实体通常存储在
Google Datastore 使用 Objectify。
从 Product 的 name 属性创建的 slug 是
Document。同样的 slug 是一个实体的 (String) ID(我们称之为
ProductLookup),我将使用它来获取 Key 到对应/匹配
Product.
注意:Product 有一个自动生成的Long id 作为name 属性
(因此用于查找 Product 的 slug 甚至在
创建Product——这样我就创建了一个新的ProductLookup
name 更改时的实体。
因为我要拆分通常在单个实体中的信息
分成两个不同的对象(Product 和 Document,更不用说
额外的ProductLookup实体),有什么我应该注意的特殊情况
出去干嘛?有什么建议吗?
如果我有对 Product 的引用,我可以使用 slug 来获取对应的
Document.
如果我有 slug,我可以使用 ProductLookup 获取 Product 并使用 slug
作为Document 的doc_id。
如果我通过 Search API 找到一组Documents,我可以使用他们的doc_ids 来获取
ProductLookup,然后是 Product。
【问题讨论】:
-
我已经更新了设计以在数据存储实体中包含所有数据,并在搜索 API 中使用全文可搜索字段创建文档。这会导致一些重复,但麻烦会少很多。
标签: java google-app-engine full-text-search objectify