Python Google应用程序引擎ndb中的分层标记

Python Google应用程序引擎ndb中的分层标记,python,google-app-engine,tags,app-engine-ndb,Python,Google App Engine,Tags,App Engine Ndb,我想在Google App Engine中为产品数据库提供一个简单的、本体风格的标记系统 作为一个基本示例,标签将是预定义的: root --Household ----Bedroom ------Bed --------Sheets --------Pillows ----Bathroom ------Bath ------Shower 对于标有图纸的产品,我希望搜索卧室标签可以返回该产品。我想确保在对产品进行标记时,只输入有效的标记 实现这一目标的最佳方式是什么 我的想法大致如下: 类层次

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

作为一个基本示例,标签将是预定义的:

root
--Household
----Bedroom
------Bed
--------Sheets
--------Pillows
----Bathroom
------Bath
------Shower
对于标有
图纸的产品
,我希望搜索
卧室
标签可以返回该产品。我想确保在对产品进行标记时,只输入有效的标记

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

我的想法大致如下:

类层次结构标记(ndb.Model):
name=ndb.StringProperty(必需=True)
parent=ndb.KeyProperty(必需=True,kind='HierarchicalTag')

任何帮助都将不胜感激

如果层次结构只定义一次,我将定义层次结构的字典(或您选择的结构)。 创建产品时,我会保存产品的标签路径

模型的外观如下所示:

class Product(ndb.model):
    tags = ndb.StringProperty(repeated=True)
    name = ndb.StringProperty()
e、 使用你的例子层次结构,如果保存一个枕头,我会包括:家庭,卧室,床,枕头

Product(tags=['Household', 'Bedroom', 'Bed', 'Pillows'], name='Best pillow case')
然后,查询对于层次结构中的任何级别都很容易。e、 g.查询床上用品:

qry = Product.query(Product.tags=='Bed')
或仅查询枕头:

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

等级制度会有多深?它是预定义的吗?深度是任意的,但只定义一次。。。也许我应该用字典来做这件事?因此,如果用户输入的标签是“Househouse”(我不会将产品输入数据库),我可以实现一个简单的深度优先搜索来获取子树中的所有标签,然后将结果提交到数据存储。。。太棒了:)谢谢!