diff --git a/src/Umbraco.Web/PublishedContentQuery.cs b/src/Umbraco.Web/PublishedContentQuery.cs
index 2dbe4de4c5..72aec94e58 100644
--- a/src/Umbraco.Web/PublishedContentQuery.cs
+++ b/src/Umbraco.Web/PublishedContentQuery.cs
@@ -191,46 +191,52 @@ namespace Umbraco.Web
///
public IEnumerable 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);
}
///
@@ -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);
}
///