如何为Python中document_client对象发送的Cosmos DB查询设置延续标记?

2024-09-28 05:25:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个API,它根据出现在文档字段中的关键字检索文档。我想对结果进行分页,这样我就可以将文档返回给发送请求的客户机,并允许他们在需要时请求更多的文档。当我在azuredataexplorer中时,查询本身在浏览器中只需要一秒钟左右的时间,但当我使用Python DocumentDB库进行查询时,则需要大约一分钟的时间。在

看看Microsoft Cosmos DB REST API,似乎有两个标记被使用,x-ms_continuationx-ms-max-item-count。在

把这些作为条目放在document_client.QueryDocuments()字典的选项中并没有起到什么作用。在

在GitHub存储库中,Read()方法引用选项参数:

    headers = base.GetHeaders(self,
                              initial_headers,
                              'get',
                              path,
                              id,
                              type,
                              options)
    # Read will use ReadEndpoint since it uses GET operation
    url_connection = self._global_endpoint_manager.ReadEndpoint
    result, self.last_response_headers = self.__Get(url_connection,
                                                    path,
                                                    headers)

在文件所在的base.py中,我看到了这两个代码块

^{pr2}$

这似乎与上述两个参数相对应。但是,当我在查询({'continuation':True,'maxItemCount':10})中将它们设置为选项时,没有任何更改。在

最后的查询看起来像

client.QueryDocuments(collection_link, query, {'continuation':True,'maxItemCount':10})

我还尝试使用字符串代替maxItemCount的int。在

我在这里做错什么了?在

编辑:标题与上述文档中的两个相同,来自http_constants.py

# Our custom DocDB headers
Continuation = 'x-ms-continuation'
PageSize = 'x-ms-max-item-count'

Tags: 文档selfclientapiread选项count时间
3条回答

结果是,查询结果需要从results对象本身处理,应该调用方法_fetch_function(options)

q = client.QueryDocuments(collection_link, query, {'maxItemCount':10})
results_1 = q._fetch_function({'maxItemCount':10})
#this is a string representing a JSON object
token = results_1[1]['x-ms-continuation']
results_2 = q._fetch_function({'maxItemCount':10,'continuation':token})

数据包含在results_[n][0]中,调用返回的头信息返回到results_[n][1]中。在

也可以使用fetch_next_block()在页面中获取结果。 注意:用户的代码不应该公开continuation标记

q = db_source._client.QueryDocuments(collection_link, query,  {'maxItemCount': 10, 'continuation': True})
results = q.fetch_next_block()

参考号:https://github.com/Azure/azure-documentdb-python/issues/98

continuation token的工作方式是,当您查询文档并且有更多的文档与该查询匹配时,服务将返回一个标记(或一个标记),您需要将其包含在下一个查询中。这将告诉服务从该标记而不是从开始处获取文档。在

所以在您的代码中,第一个查询将没有continuation参数(或null)。当您得到结果时,您应该找出是否从服务返回令牌。如果没有返回令牌,则表示没有可用的数据。但是,如果返回令牌,则应在第二个查询的查询选项中包含该令牌。在

相关问题 更多 >

    热门问题