【问题标题】:Hierarchical Tags in Google App Engine ndbGoogle App Engine ndb 中的分层标签
【发布时间】:2014-03-18 05:40:57
【问题描述】:

我想为 Google App Engine 中的产品数据库提供一个简单的本体风格标记系统。

作为一个基本的例子,标签是预先定义好的:

root
--Household
----Bedroom
------Bed
--------Sheets
--------Pillows
----Bathroom
------Bath
------Shower

对于带有Sheets 标记的产品,我希望搜索Bedroom 标记以返回该产品。而且我想确保当一个产品被标记时,只输入有效的标签。

实现这一目标的最佳方法是什么?

我的想法是这样的:

class HierarchicalTag(ndb.Model):
    name = ndb.StringProperty(required=True)
    parent = ndb.KeyProperty(required=True, kind='HierarchicalTag')

任何帮助将不胜感激!

【问题讨论】:

  • 层次结构有多深?是预定义的吗?
  • 深度是任意的,但只定义一次......也许我应该用字典来做?

标签: python google-app-engine tags app-engine-ndb


【解决方案1】:

如果层次结构仅在我定义层次结构的字典(或您选择的结构)后才定义。 创建产品时,我会根据产品保存标签的路径。

模型看起来像这样:

class Product(ndb.model):
    tags = ndb.StringProperty(repeated=True)
    name = ndb.StringProperty()

例如使用您的示例层次结构,如果保存枕头,我将包括:家庭、卧室、床、枕头。

Product(tags=['Household', 'Bedroom', 'Bed', 'Pillows'], name='Best pillow case')

查询对于层次结构中的任何级别都很容易。例如查询床品:

qry = Product.query(Product.tags=='Bed')

或者只查询枕头:

qry = Product.query(Product.tags=='Pillows')

【讨论】:

  • 所以给定“家庭”作为用户输入的标签(我不会将产品输入数据库),我可以实现一个简单的深度优先搜索来获取所有标签子树,然后将结果提交到数据存储区...太棒了 :) 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多