Index POCO objects
Describes how to index POCO (Plain Old CLR Objects) objects instead of catalog content inheriting from CatalogContentBase in Optimizely Customized Commerce.
These examples apply to solutions with the Optimizely Search & Navigation and Optimizely Customized Commerce 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
};
}
}
Updated 8 months ago