HomeDev guideRecipesAPI ReferenceGraphQL
Dev guideUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket

Query examples

Describes how to work with queries in Optimizely Search & Navigation, as a replacement for the FindPagesWithCriteria method in Optimizely Content Management System (CMS).

Query scenarios

In addition to providing great, near-real-time search, Optimizely Search & Navigation can solve other querying needs for which you previously used the built-in FindPagesWithCriteria method. The examples below illustrate common querying scenarios specific to Optimizely Content Management System (CMS). See Search and filter for more filtering examples.

Filter by category

int categoryId = 3; //Category to match
var pages = SearchClient.Instance.Search<PageData>()
  .Filter(x => x.Category.Match(categoryId))
  .GetContentResult();

Filter by Author/ChangedBy

var pages = SearchClient.Instance.Search<PageData>()
  .Filter(x => x.ChangedBy.Match("Zlatan"))
  .GetContentResult();

Filter by publish date

The example below finds pages published in October 2016.

var pages = SearchClient.Instance.Search<PageData>()
  .Filter(x => x.StartPublish.MatchMonth(2016, 10))
  .GetContentResult();

To find all pages published prior to October 2016, use the query below.

var pages = SearchClient.Instance.Search<PageData>()
  .Filter(x => x.StartPublish.Before(new DateTime(2016, 10, 1)))
  .GetContentResult();

Filter by page type

When using typed content, the easiest way to filter by content type is use the SearchClient method and specify the desired type in the type parameter. However, in that case, pages of page types inheriting from the specified type are also matched. In other situations, you may not know what type to filter by until at runtime. In both cases, you can filter via IContent.ContentTypeID.

int contentTypeId = 42;

var pages = SearchClient.Instance.Search<IContent>()
  .Filter(x => x.ContentTypeID.Match(contentTypeId))
  .GetContentResult();

Filter by Site ID

In an enterprise scenario with multiple sites, all sites use one index. To enable filtering by site ID, the return value of an IContent extension method, SiteId, is indexed. Use SiteId to filter for content from a specific site.

var content = SearchClient.Instance.Search<IContent>()
  .Filter(x => x.SiteId().Match("MySiteId"))
  .GetContentResult();