我目前正在学习谷歌云数据存储,端点和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()
答案 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