Google App Engine ndb中的分层标签

时间:2014-03-18 05:40:58

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

我希望在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')

非常感谢任何帮助!

1 个答案:

答案 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')