HomeDev GuideAPI Reference
Dev GuideAPI ReferenceUser GuideGitHubNuGetDev CommunitySubmit a ticketLog In
GitHubNuGetDev CommunitySubmit a ticket

Index POCO objects

Describes how to index POCO (Plain Old CLR Objects) objects instead of catalog content inheriting from CatalogContentBase in Optimizely Commerce (PaaS).

These examples apply to solutions with the Optimizely Search & Navigation and Optimizely Commerce (PaaS) integration (EPiServer.Find.Commerce) installed.

Exclude CatalogContentBase from being indexed

Creating a POCO class and indexing it in Search & Navigation is easy. The problem is to figure out how to reindex objects when catalog content changes. This is an example of ensuring that nothing inheriting from CatalogContentBase gets indexed.

public class SiteCatalogContentClientConventions : CatalogContentClientConventions
      {
        public override void ApplyConventions(IClientConventions clientConventions)
          {
            base.ApplyConventions(clientConventions);
            ContentIndexer.Instance.Conventions.ForInstancesOf<CatalogContentBase>().ShouldIndex(x => false);
          }
      }

Add default price, prices, and inventory

You can add desired properties to your POCO class. For example: IEnumerable Prices, Price DefaultPrice, and IEnumerable. These properties can be populated by using ReadonlyPriceLoader and InventoryLoader.

Listen for updates

You can override methods that return a delegate for indexing content by creating POCO objects and indexing them.

public class SiteCatalogKeyEventListener : CatalogContentEventListener
      {
        public SiteCatalogKeyEventListener(
          ReferenceConverter referenceConverter,
          IContentRepository contentRepository,
          IClient client,
          CatalogEventIndexer indexer,
          CatalogContentClientConventions clientConventions)
          : base(referenceConverter, contentRepository, client, indexer, clientConventions)
            {
            }
    
        protected override Action<IContent> GetIndexContentAction()
          {
            return (content) =>
              {
                // Create the POCO class here, and call the indexer
              };
          }
    
        protected override Action<IContent> GetIndexContentAndDescendantsAction()
          {
            return (content) =>
              {
                // Create the POCO class here, and call the indexer
              };
          }
      }