Create a SearchAfterQuery query

You can search for specific entities in Sitecore Content Hub using a SearchAfterQuery query. The SearchAfterQuery does not itself query entities; it describes the querying conditions. It is the querying client that is responsible for running queries and it requires a defined SearchAfterQuery query. The SearchAfterQuery object supports the following parameters:

  • Filter - the type of filter to be invoked.

  • Take - the number of entities to be retrieved.

  • Sorting - the sorting options to be applied.

  • LoadConfiguration - the load configuration to be applied.

  • SearchAfter - a list of sort values to retrieve the next page of results.

  • Renditions - the renditions to be applied.

  • NestedRelations - the nested relations to be applied.

Query filters

You use the QueryFilterBuilder to create filters, as shown in the following examples.

Query by definition name

The following example queries by definition name.

RequestResponse
var filter = QueryFilterBuilder.Definition.Name == "M.Asset";

Query by definition ID

The following example queries by definition ID.

RequestResponse
var filter = QueryFilterBuilder.Definition.Id == 40;

Query by created by user

The following example queries by user.

RequestResponse
var filter = QueryFilterBuilder.CreatedBy == 6;

Query by DateTime property

The following example queries by DateTime property.

RequestResponse
var filter =
    QueryFilterBuilder.DateTime("created_on") <= DateTime.UtcNow;

Query M.Asset entities

The following example queries for M.Asset entities with a title equal to my asset.

RequestResponse
QueryNodeFilter filter = QueryFilterBuilder.Definition.Name == "M.Asset" &&
             QueryFilterBuilder.String("Title") == "my asset";
 var searchAfterQuery =  new SearchAfterQuery(
   filter,
   new List<Sorting>{new() { Field = "identifier", Order = QuerySortOrder.Asc }})
{
   Take = Take,
   LoadConfiguration = new EntityLoadConfiguration
   {
       CultureLoadOption =  new CultureLoadOption(new CultureInfo("en-us")),
       PropertyLoadOption = PropertyLoadOption.All,
       RelationLoadOption = RelationLoadOption.All
    }
};

IEntitySearchAfterResult result = await _client.Querying.SearchAfterAsync(searchAfterQuery).ConfigureAwait(false);

// query for the next set of results
searchAfterQuery.SearchAfter = result.LastHitData;
result = await _client.Querying.SearchAfterAsync(searchAfterQuery).ConfigureAwait(false);

Do you have some feedback for us?

If you have suggestions for improving this article,