Azure Search .Net SDK 可能不会将所有请求的结果返回到请求。在这种情况下,它将返回一个ContinuationToken作为结果 ( DocumentSearchResult ) 的一部分。
如果 Azure 搜索无法在单个响应中包含所有结果,则返回的响应将包含一个可以传递给 ContinueSearch 以检索更多结果的延续令牌。有关详细信息,请参阅 DocumentSearchResultBase.ContinuationToken。请注意,此方法并非旨在帮助您实现搜索结果的分页。您可以使用 Search 方法的 Top 和 Skip 参数实现分页。
因此,建议在返回 ContinuationToken 时,调用ContinueSearch以获取其余结果。
结合两个 Type 对象DocumentSearchResult<T>
(一个来自原始搜索,另一个来自 ContinueSearch)的最佳/推荐方法是什么,以便我可以将所有结果一起返回给消费者?
这是我的第一次尝试(“PerformSearch”是要调用的方法,应该返回所有结果):
private DocumentSearchResult<T> PerformSearch<T>(string searchText, SearchParameters searchParameters) where T : class
{
var searchIndexClient = GetSearchIndexClient<T>();
var searchResults = searchIndexClient.Documents.Search<T>(searchText, searchParameters);
if (searchResults.ContinuationToken != null)
{
ContinueSearch(searchResults, searchIndexClient, searchResults.ContinuationToken);
}
return searchResults;
}
private void ContinueSearch<T>(DocumentSearchResult<T> previousResults, SearchIndexClient searchIndexClient, SearchContinuationToken continuationToken) where T : class
{
var results = searchIndexClient.Documents.ContinueSearch<T>(continuationToken);
previousResults.AddResults(results);
if (results.ContinuationToken != null)
{
ContinueSearch(previousResults, searchIndexClient, results.ContinuationToken);
}
}
public static void AddResults<T>(this DocumentSearchResult<T> first, DocumentSearchResult<T> second) where T : class
{
foreach (var searchResult in second.Results)
{
first.Results.Add(searchResult);
}
foreach (var facet in second.Facets)
{
first.Facets.Add(facet.Key, facet.Value);
}
}