Loading...
Area: Episerver Commerce
Applies to versions: 10 and higher
Other versions:

Index POCO objects instead of CatalogContentBase

Recommendations [hide]

This topic describes how to index POCO (Plain Old CLR Objects) objects instead of catalog content inheriting from CatalogContentBase. These examples apply to solutions with the Episerver Search & Navigation-Commerce integration (EPiServer.Find.Commerce) installed.

Excluding 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 how to ensure that nothing that inherits 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);
      }
  }

Adding default price, prices, and inventory

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

Listening for updates

You can override methods that return a delegate for indexing content by creating POCO objects and index 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
          };
      }
  }
Do you find this information helpful? Please log in to provide feedback.

Last updated: Oct 24, 2016

Recommendations [hide]