Fix search not skipping results

This commit is contained in:
Ronald Barendse
2019-11-01 10:49:45 +01:00
parent a873c9188f
commit b0d834668d

View File

@@ -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>