根据本文档Total hits and Page Counts,如果我想实现分页,则应在查询中结合使用skip和top。
以下是我的POST查询
"1916.74"
它应该从100-> 200返回
{
"count": true ,
"search": "apple",
"searchFields": "content",
"select": "itemID, content",
"searchMode": "all",
"queryType":"full",
"skip": 100,
"top":100
}
但是它只返回前100个,而不是分页偏移量为100
{
"@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
},
我应该设置什么东西吗?
答案 0 :(得分:0)
如何实现分页的简短答案(来自this article):将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
REST API documentation还介绍了如何实现分页,以及@odata.nextLink
和@search.nextPageParameters
的真正目的(也在this related question中介绍)。
引用API参考
部分搜索响应的继续
有时候,Azure搜索无法在单个Search响应中返回所有请求的结果。可能由于不同的原因而发生这种情况,例如当查询通过不指定
$top
或为$top
指定太大的值而请求太多文档时。在这种情况下,Azure搜索将在响应正文中包含@odata.nextLink
批注,如果是POST请求,则还将包含@search.nextPageParameters
。您可以使用这些批注的值来制定另一个“搜索”请求,以获取搜索响应的下一部分。这称为原始搜索请求的 continuation ,并且注释通常称为 continuation令牌。有关这些注释的语法及其在响应正文中出现的位置的详细信息,请参见下面的“响应”中的示例。Azure搜索可能返回延续令牌的原因是特定于实现的,并且可能会更改。健壮的客户应始终准备好处理以下情况:返回的文档少于预期的数量,并且包含继续令牌以继续检索文档。还要注意,您必须使用与原始请求相同的HTTP方法才能继续。例如,如果您发送了GET请求,则您发送的任何继续请求也必须使用GET(对于POST同样如此)。
注意
@odata.nextLink
和@search.nextPageParameters
的目的是保护服务免受请求过多结果的查询的影响,而不是提供用于分页的通用机制。如果要分页显示结果,请一起使用$top
和$skip
。例如,如果您希望页面大小为10,则第一个请求应具有$top=10
和$skip=0
,第二个请求应具有$top=10
和$skip=10
,第三个请求应具有$top=10
和$skip=20
,依此类推。
答案 1 :(得分:-1)
下面的示例是不带顶部的Get方法。
GET方法
https://example.search.windows.net/indexes('example-content-index-zh')/docs?api-version=2017-11-11&search=2018&$count=true&$skip=150&select=itemID
结果:
{
"@odata.context": "https://example.search.windows.net/indexes('example-index-zh')/$metadata#docs(*)",
"@odata.count": 133063,
"value": [ //skip value ],
"@odata.nextLink": "https://example.search.windows.net/indexes('example-content-index-zh')/docs?api-version=2017-11-11&search=2018&$count=true&$skip=150"
}
无论我使用帖子还是获取,一旦我添加 $ top =#, @ odata.nextLink 都不会显示在结果中。
最后,我发现虽然 @ odata.nextLink 或 @ search.nextPageParameters 不会显示。但是分页有效,我必须数一下自己。