Google 搜索 API 通配符
Google Search API Wildcard
我在 Google App Engine 上有一个 Python 项目 运行。我有一组数据当前放置在数据存储中。在用户端,我从我的 API 中获取它们,并通过客户端搜索在 Google 可视化 table 上向用户显示它们。由于限制,我一次查询只能获取 1000 条记录。我希望我的用户从我拥有的所有记录中进行搜索。我可以在显示它们之前使用多个查询来获取它们,但是获取 1000 条记录已经需要 5-6 秒,所以这个过程可能会超过 30 秒超时,我认为在 table 上放置大约 20.000 条记录不是个好主意。
所以我决定将我的记录放在 Google 搜索 API 上。编写了一个脚本来同步数据存储和搜索 API 索引之间的重要数据。执行搜索时,找不到通配符之类的东西。例如,假设我有用户字段存储一个包含 "Ilhan" 值的字符串。当用户搜索 "Ilha" 时,该记录不会出现。我想显示记录包括 "Ilhan" 值,即使它是部分输入的。所以基本上 SQL 相当于我的搜索应该是 "select * from users where user like '%ilh%'".
我想知道是否有办法做到这一点,或者这不是搜索 API 的工作方式吗?
我完全在数据存储中设置了类似的功能。我有一个重复计算的 属性,其中包含可以为给定对象形成的所有搜索子字符串。
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 搜索 API 的其他功能,并且如果每个实体的子串数量不会让您面临达到 900 个属性限制的风险,那么我建议改为这样做,因为它非常简单直接。
至于5-6秒取1000条记录,需要取那么多吗?为什么不只获取 100 甚至 20,并使用查询光标让用户仅在需要时拉下一页。
我在 Google App Engine 上有一个 Python 项目 运行。我有一组数据当前放置在数据存储中。在用户端,我从我的 API 中获取它们,并通过客户端搜索在 Google 可视化 table 上向用户显示它们。由于限制,我一次查询只能获取 1000 条记录。我希望我的用户从我拥有的所有记录中进行搜索。我可以在显示它们之前使用多个查询来获取它们,但是获取 1000 条记录已经需要 5-6 秒,所以这个过程可能会超过 30 秒超时,我认为在 table 上放置大约 20.000 条记录不是个好主意。
所以我决定将我的记录放在 Google 搜索 API 上。编写了一个脚本来同步数据存储和搜索 API 索引之间的重要数据。执行搜索时,找不到通配符之类的东西。例如,假设我有用户字段存储一个包含 "Ilhan" 值的字符串。当用户搜索 "Ilha" 时,该记录不会出现。我想显示记录包括 "Ilhan" 值,即使它是部分输入的。所以基本上 SQL 相当于我的搜索应该是 "select * from users where user like '%ilh%'".
我想知道是否有办法做到这一点,或者这不是搜索 API 的工作方式吗?
我完全在数据存储中设置了类似的功能。我有一个重复计算的 属性,其中包含可以为给定对象形成的所有搜索子字符串。
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 搜索 API 的其他功能,并且如果每个实体的子串数量不会让您面临达到 900 个属性限制的风险,那么我建议改为这样做,因为它非常简单直接。
至于5-6秒取1000条记录,需要取那么多吗?为什么不只获取 100 甚至 20,并使用查询光标让用户仅在需要时拉下一页。