Azure Search .Net SDK потенциально не возвращает все запрошенные результаты в запрос. В этом случае он вернет ContinuationToken как часть результата (DocumentSearchResult).Azure Search .Net SDK - Какой рекомендуемый способ комбинировать результаты типа DocumentSearchResult <T> после вызова ContinueSearch <T>?
Если Azure Поиск не может включать в себя все результаты в виде единого ответа, ответ возвращается будет включать продолжение маркер, который может быть передан в ContinueSearch, чтобы получить больше результатов. Дополнительную информацию см. В документе DocumentSearchResultBase.ContinuationToken. Обратите внимание, что этот метод не предназначен для того, чтобы помочь вам выполнить поиск поисковых запросов. Вы можете реализовать пейджинг с использованием параметров «Вверх» и «Пропустить» для метода поиска.
Как таковое рекомендуется, чтобы при возврате ContinuationToken был вызван ContinueSearch, чтобы получить остальные результаты.
Каков наилучший/рекомендуемый способ объединения двух объектов типа 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);
}
}
Привет, Брюс, да, я использую верх. Это требование моего интерфейса с лазурным поиском. Из документации видно, что ограничения и продолжение Azure Search произвольны. Они не дают никаких обещаний о причинах или поведении и не рекомендуют использовать его для подкачки. Они только говорят «будьте готовы справиться с этим». Поэтому в этом случае я убеждаюсь, что я пейджинг правильно (сверху и снизу), и мне нужно убедиться, что я верну все возможные результаты для этой «страницы». Вот почему мой вопрос вызван. – richard