我构建了像
这样的搜索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文章都具有与ID相同的doc_id。
因此,当我收到Search API的响应时,我必须查询3次
doc_id=u'4873035534303232', doc_id=u'5717460464435200', doc_id=u'5506354231902208'
我认为这个过程非常糟糕。配额将很快超过。你有其他解决方案吗?
答案 0 :(得分:0)
使用ndb.get_multi
或者只是对数据进行反规范化并将其存储在搜索API中,以便更快地访问。
ndb.get_multi
将使用单个批处理来获取所有密钥并仅使用N个读取操作。 (0.05百万Ops是免费的)