This document describes the integration between EPiServer Find and EPiServer CMS 7.5 with updates. The EPiServer CMS integration consists of a number of components that make it convenient to use the Find .NET client API with EPiServer CMS.
The integration components are:
- IndexingModule - Hooks up events to handle indexing content (IContent objects).
- A set of conventions applied to the SearchClient.Instance object exclude some properties of the IContent object and other EPiServer 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, re-indexing and removal of content from the index. You can customize the content to be indexed by modifying its conventions.
- A scheduled job - EPiServer Find CMS Indexing Job, for complete re-indexing of all content.
- The GetContentResult extension method, whihc you can call to execute search requests and get actual IContent objects back.
- Several additional filter methods that make it more convenient to filter on EPiServer CMS types, such as ContentReference.
Setting up for development
The CMS integration assumes that each environment has its own Find 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 re-indexing.
If any of the above guidelines is not met, the search and querying functionality may appear to work but produce unexpected results. For instance, the GetContentResult method returning 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.