我有一个运行在谷歌应用引擎上的Python项目。我当前在数据存储中放置了一组数据。在用户端,我从我的API中获取它们,并在带有客户端搜索的Google Visualization表上向用户显示它们。由于限制,我一次只能获取1000条记录。我希望我的用户从我拥有的所有记录中进行搜索。我可以在显示它们之前使用多个查询来获取它们,但是获取1000条记录已经花费了5-6秒的时间,所以这个过程可能会超过30秒的超时,我不认为在一个表上放置大约20.000条记录是个好主意。
所以我决定把我的记录放到谷歌搜索API上。编写了一个脚本以在数据存储和搜索API索引之间同步重要数据。执行搜索时,找不到任何通配符之类的内容。例如,假设我让user字段存储一个包含"Ilhan“值的字符串。当用户搜索"Ilha“时,该记录不会显示。我想显示包含"Ilhan“值的记录,即使它只是部分输入。所以基本上SQL等效于我的搜索应该类似于"select * from users where user like '%ilh%'“。
我想知道有没有办法做到这一点,或者这不是搜索API的工作方式吗?
发布于 2018-07-26 23:14:47
我完全在数据存储中设置了类似的功能。我有一个重复计算的属性,它包含可以为给定对象形成的所有搜索子字符串。
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个,并使用查询游标让用户仅在需要时才提取下一个页面。
https://stackoverflow.com/questions/51532604
复制相似问题