Google Appengine 搜索 API 到数据存储区查询

Google Appengine Search API to Datastore Query

我将搜索 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 插入搜索 API,然后我需要查询 Datastore 以获取 blobKey。每篇 ndb 文章都有一个相同的 doc_id 作为 ID。

所以当我得到搜索 API 的响应时,我必须查询 3 次

doc_id=u'4873035534303232', doc_id=u'5717460464435200', doc_id=u'5506354231902208'

我觉得这个过程太糟糕了。很快就会超过配额。您还有其他解决方案吗?

使用 ndb.get_multi 或只是对该数据进行反规范化并将其存储在搜索中 API 以加快访问速度。

ndb.get_multi 将使用单个批次获取所有密钥并仅使用 N 个读取操作。 (5 万次 Ops 是免费的)