我有一个在Google App Engine上运行的Python项目。我目前在数据存储区中放置了一组数据。在用户方面,我从我的API中获取它们,并通过客户端搜索在Google可视化表上将其显示给用户。由于局限性,我一次查询只能获取1000条记录。我希望我的用户从我拥有的所有记录中进行搜索。在显示它们之前,我可以通过多个查询来获取它们,但是要获取已花费5-6秒的1000条记录,因此此过程可能会超过30秒的超时时间,而且我认为在表上放置20.000条记录不是一个好主意。
因此,我决定将自己的记录放在Google Search API上。编写脚本以在数据存储区和Search API Index之间同步重要数据。执行搜索时,找不到通配符之类的东西。例如,假设我让用户字段存储了一个包含“ Ilhan”值的字符串。当用户搜索“ Ilha”时,该记录不会显示。我想显示包含“ Ilhan”值的记录,即使部分输入也是如此。因此,基本上,与我的搜索等效的SQL应该类似于“从用户中选择'%ilh%'的用户中选择*”。
我想知道是否有办法,或者这不是Search API的工作原理吗?
答案 0 :(得分:1)
我完全在数据存储区中设置了类似的功能。我有一个重复的计算属性,其中包含可以为给定对象形成的所有搜索子字符串。
class User(ndb.Model):
# ... other fields
search_strings = ndb.ComputedProperty(
lambda self: [i.lower() for i in all_substrings(strings=[
self.email,
self.first_name,
self.last_name,], repeated=True)
您的搜索查询将如下所示:
User.query(User.search_strings == search_text.strip().lower()).fetch_page(20)
如果您不需要Google Search API的其他功能,并且每个实体的子字符串数不会使您面临达到900个属性限制的风险,那么我建议您这样做,因为它非常简单并直接前进。
至于需要5-6秒来获取1000条记录,您是否需要获取那么多记录?为什么不只获取100甚至20,并使用查询光标让用户仅在需要时才拉下一页。