我希望在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')
非常感谢任何帮助!
答案 0 :(得分:1)
如果只定义了层次结构,我将定义层次结构的字典(或您选择的结构)。 创建产品时,我会根据产品保存标记路径。
模型看起来像这样:
class Product(ndb.model):
tags = ndb.StringProperty(repeated=True)
name = ndb.StringProperty()
e.g。使用您的示例层次结构,如果保存枕头,我将包括:家庭,卧室,床,枕头。
Product(tags=['Household', 'Bedroom', 'Bed', 'Pillows'], name='Best pillow case')
对于层次结构中的任何级别,查询都很容易。例如询问床品:
qry = Product.query(Product.tags=='Bed')
或仅查询枕头:
qry = Product.query(Product.tags=='Pillows')