【发布时间】:2015-04-16 16:21:32
【问题描述】:
我像这样构建 Search API 数据
search.SearchResults(
results=
[
search.ScoredDocument(doc_id=u'4873035534303232', fields=[search.TextField(name=u'name', value=u'a'), search.TextField(name=u'description', value=u'b'), search.DateField(name=u'date', value=datetime.datetime(2015, 2, 16, 7, 21, 58, 188000)), search.TextField(name=u'author', value=u'test@example.com')], language=u'en', rank=130231318L),
search.ScoredDocument(doc_id=u'5717460464435200', fields=[search.TextField(name=u'name', value=u'a b c'), search.TextField(name=u'description', value=u'c d e'), search.DateField(name=u'date', value=datetime.datetime(2015, 2, 16, 7, 21, 25, 965000)), search.TextField(name=u'author', value=u'test@example.com')], language=u'en', rank=130231285L),
search.ScoredDocument(doc_id=u'5506354231902208', fields=[search.TextField(name=u'name', value=u'How about today?'), search.TextField(name=u'description', value=u"it's good"), search.DateField(name=u'date', value=datetime.datetime(2015, 2, 16, 7, 10, 13, 608000)), search.TextField(name=u'author', value=u'test@example.com')], language=u'en', rank=130230613L)
],
number_found=3L)
我没有将 blobKey 插入 Search API,然后我需要查询 Datastore 以获取 blobKey。每个 ndb 文章都有一个相同的 doc_id 作为一个 ID。
所以当我得到 Search API 的响应时,我必须查询 3 次
doc_id=u'4873035534303232', doc_id=u'5717460464435200', doc_id=u'5506354231902208'
我认为这个过程非常糟糕。很快就会超过配额。您还有其他解决方案吗?
【问题讨论】:
-
启用计费以提高报价限制?
-
@PaulCollingwood 当然,总有一天我必须这样做~!我想知道它的优化解决方案。是通用解决方案吗?
-
无法理解您的问题。执行搜索查询后,您想从数据存储中为每个结果获取一些额外数据?使用
ndb.get_multi或只是对该数据进行反规范化并将其存储在搜索 API 中以便更快地访问。 -
哦,看看 appstats 是否是你想做的。但正如 Dmitry 所说,这正是您获取数据所要做的。
-
@DmitrySadovnychyi 你的意思是
ndb.get_multi不贵,对吧?我想当我尝试这个过程时,API 调用将是每页 3 次调用,这不是一个好的解决方案。谷歌每天给我们 1000 个免费查询,所以我想知道有效的解决方案。现在我知道了。谢谢!
标签: google-app-engine google-cloud-datastore app-engine-ndb google-search-api