When an index rebuild is invoked, sitecore XC indexes the properties of the catalog entity by default. These indexed fields are added to web & master indexes. To add a custom field to the index, we need to map the custom field to a field type & create a custom field handler. To register the new custom field, we need to add an entry in the fields with appropriate type & add it to the search policy set. In this case, “PlugIn.Search.Solr.PolicySet-1.0.0.json”.
{
"$type"
:
"Sitecore.Commerce.Core.PolicySet, Sitecore.Commerce.Core"
,
"Id"
:
"Entity-PolicySet-SolrSearchPolicySet"
,
"Version"
:
1
,
"IsPersisted"
:
false
,
"Name"
:
"SolrSearchPolicySet"
,
"Policies"
:
{
"$type"
:
"System.Collections.Generic.List`1[[Sitecore.Commerce.Core.Policy, Sitecore.Commerce.Core]], mscorlib"
,
"$values"
:
[
{
"$type"
:
"Sitecore.Commerce.Plugin.Search.ItemIndexablePolicy, Sitecore.Commerce.Plugin.Search"
,
"IndexName"
:
"sitecore_web_index"
,
"FieldTypeMappers"
:
[
{
"TypeName"
:
"string"
,
"Type"
:
"System.String"
,
"NameFormat"
:
"{0}_s"
,
"CultureFormat"
:
"_{1}"
}
]
,
"Fields"
:
[
{
"$type"
:
"Sitecore.Commerce.Plugin.Search.Solr.SolrIndexFieldConfiguration, Sitecore.Commerce.Plugin.Search.Solr"
,
"Name"
:
"CustomField"
,
"Type"
:
"System.String"
,
"TypeHint"
:
"string"
,
"Handler"
:
{
"$type"
:
"Custom.Sitecore.Commerce.Plugin.InRiverConnector.IndexFieldHandlers.CustomFieldIndexFieldHandler,
Custom.Sitecore.Commerce.Plugin.InRiverConnector"
}
}
]
}
]
}
}
We need to add a custom field handler to compose a value for the custom field that needs to be indexed. To create a custom field index handler, we need to create a class that inherits from the “Sitecore.Commerce.Plugin.Search.AbstractIndexFieldHandler class”, and implement the ComposeValue method.
public
class CustomFieldHandler
: AbstractIndexFieldHandler
{
public
override
object ComposeValue
(
object source, ConcurrentDictionary
<
string,
object
> context
)
{
if
(context
==
null
|| source
==
null
)
{
return
null
;
}
return
"Sample custom field handler value"
;
}
}
We need to bootstrap the commerce engine environment to apply the changes. After this we need to restart the commerce engineer & rebuild the indexes.