The integration includes specific components for convenient usage of the Optimizely Search & Navigation .NET client API with Optimizely Content Management System (CMS).
## Integration packages
The integration involves the following NuGet packages:
_Episerver.Find.Cms_ – Integration of the Search & Navigation REST API with CMS.
_EPiServer.Find_ – The .NET client API for the Search & Navigation REST API (installed with _EPiServer.Find.Cms_).
_EPiServer.Find.Framework_ – General integration components for the Search & Navigation REST API (installed with _EPiServer.Find.Cms_).
## Integration components
Some of the functionality you get with the integration:
`
IndexingModule
` – Hooks up events to handle content indexing (`IContent
` objects).Conventions applied to the `
SearchClient.Instance
` object exclude some properties of the `IContent
` object and other CMS classes. The conventions also include additional fields. This is handled by the IndexingModule at startup using the `CmsClientConventions
` class.The `
ContentIndexer
` class, which handles the indexing, reindexing and removal of content from the index. You can customize content to be indexed by modifying its conventions.A scheduled job, **Episerver Find (Search & Navigation) Content Indexing Job**, handles the reindexing of all content.
The `
GetContentResult
` extension method – Call to execute search requests and get actual `IContent
` objects back.Several additional filter methods,such as `
ContentReference
`, make it more convenient to filter on CMS types.
## Set up for development
The CMS integration assumes that each environment has its own Search & Navigation index. It also assumes that content is added and removed through the CMS API. This means that:
Each developer should have their own development index unless you use a shared database.
Each server environment (test, staging, etc.) should have its own index unless they use a shared database.
If content is removed or added in ways other than the CMS API (for instance, using a database restore/rollback), you should run the scheduled job for reindexing.
If the above guidelines are not followed, the search and querying functionality may appear to work but produce unexpected results. For instance, the `GetContentResult
` method returns less content than its `TotalMatching
` property reports. This might happen if two developers use the same index, and one of them publishes a page that does not exist in the other developer's database.