Google云数据存储区获取包含项目的列表

时间:2017-09-06 14:24:06

标签: google-app-engine google-cloud-datastore google-cloud-platform

我目前正在学习谷歌云数据存储,端点和NDB模型。到目前为止,我自己做得很好(完全是新手程序员),并遇到了一个问题。我有一个属性是一个字符串,其中包含我想用于搜索的关键字。例;烤面包,面包圈,白,黑。

我的查询当前提取了一个精确的字符串匹配,但我希望它也可以进行部分字符串匹配。下面的代码确实有效,但似乎IN语句仍在寻找完全匹配。无论如何要告诉数据存储区,对于属性单独读取每个单词的分隔符是什么?或者我应该将它分成4个不同的属性字段?

 if len(search) == 4:
        for task in DirectionModel.query(DirectionModel.keywords == request.keywords, namespace='cookingDirections'):
            tasks.append(Direction(name=task.name, direction=task.direction, description=task.description,
                                   keywords=task.keywords))
    else:
        for task in DirectionModel.query(DirectionModel.keywords.IN([search]), namespace='cookingDirections'):
            tasks.append(Direction(name=task.name, direction=task.direction, description=task.description,
                                   keywords=task.keywords))
    return DirectionList(items=tasks)

型号:

class DirectionModel(ndb.Model):
name = ndb.StringProperty()
direction = ndb.StringProperty(indexed=False)
description = ndb.StringProperty()
keywords = ndb.StringProperty()

1 个答案:

答案 0 :(得分:1)

您可以使用repeated property

class DirectionModel(ndb.Model):

    ...
    keywords = ndb.StringProperty(repeated=True)

并像这样查询

DirectionModel.query(DirectionModel.Keywords.IN(['toast', 'bagel', 'white', 'dark'])

这假设您将字符串列表与字符串列表进行匹配。

请注意,这类查询可以导致exploding indexes,因此如果您要进行复杂的关键字搜索,最好调查Search API