how*_*wie 0 azure azure-cognitive-search
根据这篇文档Total attempts and Page Counts,如果我想实现分页,我应该在查询中结合使用skip和top。
以下是我的 POST 查询
{
"count": true ,
"search": "apple",
"searchFields": "content",
"select": "itemID, content",
"searchMode": "all",
"queryType":"full",
"skip": 100,
"top":100
}
Run Code Online (Sandbox Code Playgroud)
它应该返回类似 100 --> 200 的内容
{
"@odata.context": "https://example.search.windows.net/indexes('example-index-')/$metadata#docs(*)",
"@odata.count": 1611,
"@search.nextPageParameters": {
"count": true,
"search": "apple",
"searchFields": "content",
"select": "itemID, content",
"searchMode": "all",
"queryType": "full",
"skip": 200
},
Run Code Online (Sandbox Code Playgroud)
但它只返回 top 100 ,而不是分页偏移到 100
"@odata.context": "https://example.search.windows.net/indexes('example-index')/$metadata#docs(*)",
"@odata.count": 1611,
Run Code Online (Sandbox Code Playgroud)
有什么我应该设置的吗?
如何实现分页的简短答案(来自本文):设置top为所需的页面大小,然后skip在每次请求时按该页面大小递增。以下是使用 GET 的 REST API 的示例:
GET /indexes/onlineCatalog/docs?search=*$top=15&$skip=0
GET /indexes/onlineCatalog/docs?search=*$top=15&$skip=15
GET /indexes/onlineCatalog/docs?search=*$top=15&$skip=30
Run Code Online (Sandbox Code Playgroud)
REST API 文档还介绍了如何实现分页,以及@odata.nextLink和的真正目的(也在这个相关问题@search.nextPageParameters中介绍)。
引用 API 参考:
继续部分搜索响应
有时,Azure 搜索无法在单个搜索响应中返回所有请求的结果。发生这种情况的原因有多种,例如当查询因未指定或指定太大的
$top值而请求太多文档时。$top在这种情况下,Azure 搜索将@odata.nextLink在响应正文中包含注释,@search.nextPageParameters如果是 POST 请求也是如此。您可以使用这些注释的值来制定另一个搜索请求,以获取搜索响应的下一部分。这称为原始搜索请求的延续,注释通常称为延续标记。有关这些注释的语法以及它们在响应正文中出现的位置的详细信息,请参阅下面的响应中的示例。Azure 搜索可能返回延续令牌的原因是特定于实现的并且可能会发生变化。强大的客户端应始终准备好处理返回的文档少于预期的情况,并且包含继续令牌以继续检索文档。另请注意,您必须使用与原始请求相同的 HTTP 方法才能继续。例如,如果您发送了 GET 请求,则您发送的任何继续请求也必须使用 GET(对于 POST 也是如此)。
笔记
@odata.nextLink和的目的@search.nextPageParameters是保护服务免受请求过多结果的查询的影响,而不是提供通用的分页机制。如果您想对结果进行分页,请同时使用$top和$skip。例如,如果您想要大小为 10 的页面,则第一个请求应具有$top=10和$skip=0,第二个请求应具有$top=10和$skip=10,第三个请求应具有$top=10和$skip=20,依此类推。
| 归档时间: |
|
| 查看次数: |
2349 次 |
| 最近记录: |