Fix search not skipping results
This commit is contained in:
@@ -191,46 +191,52 @@ namespace Umbraco.Web
|
||||
/// <inheritdoc />
|
||||
public IEnumerable<PublishedSearchResult> Search(string term, int skip, int take, out long totalRecords, string culture = "*", string indexName = null)
|
||||
{
|
||||
indexName = string.IsNullOrEmpty(indexName)
|
||||
? Constants.UmbracoIndexes.ExternalIndexName
|
||||
: indexName;
|
||||
if (string.IsNullOrEmpty(indexName))
|
||||
{
|
||||
indexName = Constants.UmbracoIndexes.ExternalIndexName;
|
||||
}
|
||||
|
||||
if (!_examineManager.TryGetIndex(indexName, out var index) || !(index is IUmbracoIndex umbIndex))
|
||||
{
|
||||
throw new InvalidOperationException($"No index found by name {indexName} or is not of type {typeof(IUmbracoIndex)}");
|
||||
}
|
||||
|
||||
var searcher = umbIndex.GetSearcher();
|
||||
|
||||
// default to max 500 results
|
||||
var count = skip == 0 && take == 0 ? 500 : skip + take;
|
||||
|
||||
ISearchResults results;
|
||||
if (culture == "*")
|
||||
{
|
||||
//search everything
|
||||
|
||||
results = searcher.Search(term, count);
|
||||
}
|
||||
else if (culture.IsNullOrWhiteSpace())
|
||||
{
|
||||
//only search invariant
|
||||
|
||||
var qry = searcher.CreateQuery().Field(UmbracoContentIndex.VariesByCultureFieldName, "n"); //must not vary by culture
|
||||
qry = qry.And().ManagedQuery(term);
|
||||
results = qry.Execute(count);
|
||||
// Search everything
|
||||
results = skip == 0 && take == 0
|
||||
? searcher.Search(term)
|
||||
: searcher.Search(term, skip + take);
|
||||
}
|
||||
else
|
||||
{
|
||||
//search only the specified culture
|
||||
IBooleanOperation query;
|
||||
if (string.IsNullOrWhiteSpace(culture))
|
||||
{
|
||||
// Only search invariant
|
||||
query = searcher.CreateQuery()
|
||||
.Field(UmbracoContentIndex.VariesByCultureFieldName, "n") // Must not vary by culture
|
||||
.And().ManagedQuery(term);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Only search the specified culture
|
||||
var fields = umbIndex.GetCultureAndInvariantFields(culture).ToArray(); // Get all index fields suffixed with the culture name supplied
|
||||
query = searcher.CreateQuery()
|
||||
.ManagedQuery(term, fields);
|
||||
}
|
||||
|
||||
//get all index fields suffixed with the culture name supplied
|
||||
var cultureFields = umbIndex.GetCultureAndInvariantFields(culture).ToArray();
|
||||
var qry = searcher.CreateQuery().ManagedQuery(term, cultureFields);
|
||||
results = qry.Execute(count);
|
||||
results = skip == 0 && take == 0
|
||||
? query.Execute()
|
||||
: query.Execute(skip + take);
|
||||
}
|
||||
|
||||
totalRecords = results.TotalItemCount;
|
||||
|
||||
return new CultureContextualSearchResults(results.ToPublishedSearchResults(_publishedSnapshot.Content), _variationContextAccessor, culture);
|
||||
return new CultureContextualSearchResults(results.Skip(skip).ToPublishedSearchResults(_publishedSnapshot.Content), _variationContextAccessor, culture);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
@@ -244,10 +250,11 @@ namespace Umbraco.Web
|
||||
{
|
||||
var results = skip == 0 && take == 0
|
||||
? query.Execute()
|
||||
: query.Execute(maxResults: skip + take);
|
||||
: query.Execute(skip + take);
|
||||
|
||||
totalRecords = results.TotalItemCount;
|
||||
return results.ToPublishedSearchResults(_publishedSnapshot.Content);
|
||||
|
||||
return results.Skip(skip).ToPublishedSearchResults(_publishedSnapshot.Content);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user