Azure Search .Net SDK は、要求されたすべての結果を要求に返さない可能性があります。この場合、結果 ( DocumentSearchResult ) の一部としてContinuationTokenが返されます。
Azure Search が 1 つの応答にすべての結果を含めることができない場合、返される応答には、さらに結果を取得するために ContinueSearch に渡すことができる継続トークンが含まれます。詳細については、DocumentSearchResultBase.ContinuationToken を参照してください。このメソッドは、検索結果のページングの実装を支援するためのものではないことに注意してください。Top パラメーターと Skip パラメーターを Search メソッドに使用して、ページングを実装できます。
そのため、ContinuationToken が返されたら、 ContinueSearchを呼び出して残りの結果を取得することをお勧めします。
Type の 2 つのオブジェクトDocumentSearchResult<T>
(1 つは元の Search からのもので、もう 1 つは 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);
}
}