如何使用Microsoft.Azure.Search SearchContinuationToken

rob*_*sta 8 .net c# azure azure-cognitive-search

有人能指出我如何实现这个的正确方向?

到目前为止,我可以查询我的索引并获得响应

SearchIndexClient indexClient = service.Indexes.GetClient(indexName);
 SearchParameters sp = new SearchParameters()
        {
            Facets = new string[] { "Brand", "Price,values:10|25|100|500|1000|2500" },
            Filter = AzureUtils.BuildFilter(brand, priceFrom, priceTo),
            OrderBy = new string[] { "" },
            IncludeTotalResultCount = true,
            Top = 9,
            SearchMode = SearchMode.Any
        };
        DocumentSearchResponse<MyClass> response = response = indexClient.Documents.Search<MyClass>(searchText, sp);
Run Code Online (Sandbox Code Playgroud)

当结果返回时,response.ContinuationToken为null

如何让我的索引返回response.ContinuationToken属性的值.

另外,如何实现此功能以获取接下来的9个结果?

谢谢

rob*_*sta 9

我在这里找到了答案 - 链接

除非您请求的结果多于页面大小,否则此属性将为null.如果您未指定Top并且结果超过50(默认页面大小为50),或者为Top指定大于1000的值并且结果超过1000(最大页面大小为1000),则会发生这种情况.在任何一种情况下,您都可以将此属性的值传递给ContinueSearchAsync方法以检索下一页结果.

如果他们像我一样陷入困境,我希望能帮到别人


Bru*_*ton 9

TL; DR版本:最安全的假设是搜索响应中是否存在延续令牌完全超出您的控制范围.

SearchContinuationToken不是用于分页结果.这就是SearchParameters.TopSearchParameters.Skip是.相反,您可以将延续令牌视为恢复无法在单个请求中因潜在任意原因而无法完成的搜索的机制.MSDN上的文档提到页面大小是原因,但这不应该被理解为合同的一部分ContinueSearch.原则上,Azure Search可能还有其他原因可以撤回延续令牌.无论原因如何,如果您想编写一个健壮的客户端,您应该准备好处理延续令牌,无论Top您的结果计数,还是任何其他因素.