Google app engine 谷歌搜索API通配符

Google app engine 谷歌搜索API通配符,google-app-engine,google-search-api,google-app-engine-python,Google App Engine,Google Search Api,Google App Engine Python,我有一个Python项目在Google应用程序引擎上运行。我有一组数据当前放在数据存储中。在用户端,我从API中获取它们,并通过客户端搜索在Google可视化表上向用户显示它们。由于限制,我只能在一次查询中获取1000条记录。我希望我的用户从我所有的记录中搜索。在显示它们之前,我可以使用多个查询来获取它们,但是获取1000条记录已经需要5-6秒,所以这个过程可能会超过30秒的超时时间,我认为在一个表中放置大约20000条记录不是一个好主意 所以我决定把我的记录放在谷歌搜索API上。编写了一个脚本

我有一个Python项目在Google应用程序引擎上运行。我有一组数据当前放在数据存储中。在用户端,我从API中获取它们,并通过客户端搜索在Google可视化表上向用户显示它们。由于限制,我只能在一次查询中获取1000条记录。我希望我的用户从我所有的记录中搜索。在显示它们之前,我可以使用多个查询来获取它们,但是获取1000条记录已经需要5-6秒,所以这个过程可能会超过30秒的超时时间,我认为在一个表中放置大约20000条记录不是一个好主意

所以我决定把我的记录放在谷歌搜索API上。编写了一个脚本来同步数据存储和搜索API索引之间的重要数据。执行搜索时,找不到任何类似通配符的内容。例如,假设我让用户字段存储一个包含“Ilhan”值的字符串。当用户搜索“Ilha”时,该记录不会显示。我想显示记录包含“Ilhan”值,即使它是部分键入的。所以,基本上,我的搜索的SQL等价物应该是类似于“从用户中选择*,其中用户为“%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 Search API的其他功能,并且如果每个实体的子字符串数量不会使您面临达到900个属性限制的风险,那么我建议您改为这样做,因为它非常简单和直接


至于用5-6秒来获取1000条记录,您需要获取那么多吗?为什么不只获取100甚至20个页面,并在用户需要时使用查询光标来拖动下一页。

在搜索此主题时,我看到了类似的方法。我记得很少有参考资料提到谷歌搜索API全文搜索功能正在开发中,但那是8年前的事了,所以我想这在不久的将来不会发生。实际上,如果搜索在所有数据中只返回匹配的值,我不需要显示1000条记录。这是客户端搜索的唯一解决方案,它不再能够完成任务,因为超出了数据量。将您的答案标记为已接受答案,但无法投票,因为我的声誉低于15。