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 是免费的)
我将搜索 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 是免费的)