HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunityDoc feedbackLog In
GitHubNuGetDev CommunityDoc feedback

If you require more extensive search functionality in your website solution, you can integrate third-party search engines with Optimizely Content Management System (CMS).

## Search for a page

The CMS `SearchDataSource` web control is a flexible web control which supports property searches, and you can apply different criteria to the search functionality.

Searching for pages often occurs through a **Property-based search** which provides an efficient and powerful tool to retrieve pages based on any property values, typically of types other than string. From markup (or the visual design mode in Visual Studio), the CMS `SearchDataSource` web control supports this type of search.

From code-behind files, you also can call the `FindPagesWithCriteria()` method of the `EPiServer.DataFactory` class to perform property-based searches. The `FindPagesWithCriteria` method is used by the `SearchDataSource` control when you perform a property-based search.

From markup or visual design mode, add `PropertyCriteria` controls to the `SearchDataSource` tag. From code-behind files, create `EPiServer.PropertyCriteria` instances and insert them into a `PropertyCriteriaCollection` that is passed to `FindPagesWithCriteria`. You must add the `SearchDataSource` control's `DataSourceID` attribute to the control that renders the data.

## Filter information

A filter is a general mechanism in CMS that is used to manage and manipulate information in listings and collections of content (`PageDataCollection`, `IContent`). As a developer, you can construct your own filters to use in conjunction with listings to display content. A filter is used for adding, removing, and sorting.

The following most common built-in filter options are as follows:

  • `SortBy` and `SortDirection` used to specify a custom property to sort on.

  • `SortOrder` uses a predefined sorting from `FilterSortOrder` `enum`.

  • `MaxCount` and `SkipCount` to limit number of items.

  • `EnableVisibleInMenu`, `PageTypeID`, and so on.

  • `LanguageBranches` collection to limit the search.

  • Criteria collection constrains the search result (used for property-search or as filters).

  • `SelectParameters` collection to set attribute values from other sources (`Control`, `Cookie`, `Form`, `Profile`, `QueryString`, `Session`, `EPiServer Property`).

  • `FilterForVisitor` works with `IEnumerable<IContent>` and `PageDataCollection`.

The CMS filter classes and enumerations are documented in the `EPiServer.Filters` namespace. You can create your own filters by extending the `EPiServer.Filters.IPageFilter` class.