About the Coveo Search Provider configuration file

The Coveo Search Provider settings are located in the <SITECORE_INSTANCE_ROOT>\App_Config\Modules\Coveo\Coveo.SearchProvider.config file. This page describes its various sections and settings.

Important

To avoid modifying the original file, you should configure the Coveo Search Provider by modifying the <SITECORE_INSTANCE_ROOT>\App_Config\Include\Coveo\Coveo.SearchProvider.Custom.config file.

General settings

These are various broad Coveo settings found under the configuration/sitecore/ element.

Name Description Example value

Coveo.Indexing.
PreferSourceSpecificFields

Specifies the default field name translation behavior for the current Sitecore instance. This setting may be overriden at the field level using the isSourceSpecific setting (see fieldNames).

true: field translation will be used
false: field translation won’t be used

Coveo.Framework.
WriteToPropertyStoreDisabled

This setting is set to true on CD servers to prevent writing to the Property Store. Don’t update this setting.

true / false

Coveo.Framework.
CriticalExceptionsDisabled

Note

This setting doesn’t appear in the configuration file, but its default value (false) may be updated.

Prevents CDs from trying to write LASTCRITICALINDEXINGEXCEPTION records in the Property Store. This setting should only be set to true on CD servers in setups where the Property Store database is in read-only mode (see Preventing CDs from trying to write to the Property Store database).

true / false

Basic configuration settings

These are basic settings that may be configured initially. They can be found under the configuration/sitecore/coveo/defaultIndexConfiguration element.

Name Description Example value

allowQueriesFromQuickView

Whether to allow search queries to be sent in the context of a Coveo Quick view. The element is under the queryConfiguration section.

Setting the value to false blocks the search query, but only when Coveo for Sitecore is visiting the item to fill the Quick view. The search query is still performed for any other visitor.

The default value is false.

true / false

disableSourceCreation

Whether to disable the creation of the sources on rebuild, as well as the indexing of the Sitecore instance content.

true / false

enableSitecoreBoosting

Whether Sitecore boosting is supported in queries or not.

true / false

farmName

The name of the Sitecore farm. Specifying a value in this setting will affect the names of the sources, security provider, and user identity.

For example, setting the farm name to dev would generate the following resource names:

  • Source: Coveo_master_index - dev

  • Security provider: Expanded Sitecore Security Provider for dev

When this setting isn’t specified, the farm name corresponds to the instance name which is, by default, composed of the machine name and the IIS website name (for example, MyMachine - SiteName).

dev, staging, production

forceDeleteExcludedItems

Whether to force a delete on excluded items.

By design, Coveo for Sitecore doesn’t make calls to delete items excluded by a filter subsequently to their indexing. You can enable this option if you want to force the deletion of these items. Don’t forget to disable it once you’re done to avoid allocating resources to this process when it’s unnecessary.

true / false

indexAllFields

Coveo for Sitecore 5 doesn’t take the indexAllFields setting into account. Handpick the fields you want to index through the Fields section of the Command Center.

indexAnalyticsFields

Whether to index fields needed for Analytics, such as the _tracking field.

true / false

indexCommunicationFactory

The factory used to instantiate objects required to communicate with the index.

indexCoveoFields

Whether to index Coveo fields on documents. These fields are system fields that aren’t starting with an underscore (_), such as templatename.

true / false

indexReferrerItemsOnUpdate

Whether referrer items are re-indexed on an item update.

true / false

maximumAge

Defines the delay that query results are cached before being refreshed by a new query on the index. This element is under the queryConfiguration section.

00:15:00

multipleValueSeparator

The separator used for fields that contain many values. For example, a field could contain a series of GUIDs.

This must match what’s set in Coveo.

;

pushPermissionsOnRebuild

Whether to send the Sitecore users and roles to Coveo on each index rebuild.

true / false

requirementsInvalidateDelay

The delay, in seconds, before the index requirements are invalidated. The index requirements include the sources, security provider, and user identity.

Useful when there are frequent indexing operations that are batched by the Sitecore search provider. In other words, the index configuration is verified each time an item is indexed. This behavior might occur in these situations:

  • When managing items through programming (for example, add/update/remove)

  • When using the Sitecore workbox to update many items at once

  • When managing buckets

Setting a value lower than 10 might cause performance issues. The minimum value is 1.

60

securityProviderName

The name of the security provider in Coveo. Used when many Sitecore instances are targeting the same Coveo organization.

This setting supersedes the value set in the farmName setting.

Sitecore Security Provider

serverUrl

The Sitecore server URL. Used by the Coveo security provider.

http://jetstreamsitecore7/

shortenUrls

Whether the clickable URI should be shortened. This will be taken into account in the UrlOptions when resolving URIs of documents.

true / false

sitecorePassword

The Sitecore password. Used for the Coveo security provider.

This password is set when using the Configuration Wizard and it’s stored in its encrypted form in the configuration file.

sitecoreUsername

The Sitecore username. Used for the Coveo security provider.

sitecore\admin

sitecoreWebServiceUri

The URI of the Sitecore Web Service. Used to retrieve the binary data of Sitecore items.

http://<INSTANCE_HOSTNAME>/sitecore%20modules/Web/Coveo/WebService/SitecoreWebService.asmx

siteName

The site name to extract Sitecore content from.

website

SkipItemOnComputedFieldError

When indexing, whether to skip an item when an exception occurs during the execution of computed field code. Default is false which results in the item being indexed, but without the computed field that the exception occurred on. When set to true, the item isn’t indexed at all.

true / false

userIdentityName

The name of the user identity in Coveo. Used when many Sitecore instances are targeting the same Coveo organization.

This setting supersedes the value set in the farmName setting.

Sitecore Admin for MyMachine - SiteName

Those are the settings that are specific to the Coveo index. They can be found under the configuration/sitecore/contentSearch/configuration/indexes element.

Name Description Example value

param desc="p_Name"

The name (id) of the index.

BinaryDataPropertiesWriter

The instance of IBinaryDataPropertiesWriter used to write binary data properties on documents sent to Coveo.

locations > crawler > database

The database name associated with the crawler.

master

locations > crawler > root

The starting point of this crawler when indexing.

/sitecore

strategies

List all indexing strategies to apply to this index.

strategies > strategy > type

The Sitecore strategy to use. You need to add the required parameter as child element so the strategy can run correctly. The parameter is database.

sourceName

The source name to be used in Coveo. This should only be set if you explicitly want to override the default source name created by Coveo for Sitecore.

Important

You shouldn’t use the same source name for different Sitecore instances, given that they’re all linked to the same Coveo organization. Be aware that doing so may cause major indexing and querying issues.

<index id="Coveo_web_index" type="Coveo.SearchProvider.ProviderIndex, Coveo.SearchProvider" patch:before = "*[2]">
  <param desc="p_Name">$(id)</param>
  <configuration ref="coveo/defaultIndexConfiguration" />
  <locations hint="list:AddCrawler">
    <crawler type="Coveo.SearchProvider.CoveoItemCrawler, Coveo.SearchProviderBase">
      <database>web</database>
      <root>/sitecore/content</root>
      <stopOnError>true</stopOnError>
    </crawler>
    <crawler type="Coveo.SearchProvider.CoveoItemCrawler, Coveo.SearchProviderBase">
      <database>web</database>
      <root>/sitecore/media library/Files</root>
      <stopOnError>true</stopOnError>
    </crawler>
  </locations>
  <strategies hint="list:AddStrategy">
    <strategy ref="contentSearch/indexConfigurations/indexUpdateStrategies/coveoOnPublishEndAsync"/>
  </strategies>
  <propertyStore ref="contentSearch/indexConfigurations/databasePropertyStore" param1="$(id)"/>
</index>

These are settings that are specific to the security configuration of the Search Provider. They can be added under the configuration/sitecore/coveo/defaultIndexConfiguration element.

<securityConfiguration type="Coveo.Framework.Configuration.SecurityConfiguration, Coveo.Framework">
  <anonymousUsers>extranet\anonymous</anonymousUsers>
  <indexPermissions>true</indexPermissions>
  <skipSitecoreCredentialsUpdate>false</skipSitecoreCredentialsUpdate>
  <skipSitecoreLoginCheck>false</skipSitecoreLoginCheck>
</securityConfiguration>
Name Description Default value

anonymousUsers

A semicolon-separated list of usernames that are considered as anonymous Sitecore users.

extranet\anonymous

indexPermissions

Whether to index the Sitecore permissions on items. Disabling this indexes all the items as Anonymous.

true

skipSitecoreCredentialsUpdate

Skips the Sitecore credentials update in Coveo for the Security Provider. To be used on content delivery servers to simplify the setup.

false

skipSitecoreLoginCheck

Skips the login validation in Sitecore. To be used only on content delivery servers to simplify the setup.

false

Field configuration settings

ComputedFields

Computed fields are fields that are created from a combination of other fields.

A typical computed fields section looks like this:

<fields hint="raw:AddComputedIndexField">
  <field fieldName="daterange_month">Sitecore.ContentSearch.ComputedFields.DateRangeMonthFacet,Sitecore.ContentSearch</field>
  <field fieldName="daterange_week">Sitecore.ContentSearch.ComputedFields.DateRangeWeekFacet,Sitecore.ContentSearch</field>
  <field fieldName="daterange_year">Sitecore.ContentSearch.ComputedFields.DateRangYearFacet,Sitecore.ContentSearch</field>
  <field fieldName="parsedcreatedby">Sitecore.ContentSearch.ComputedFields.ParsedCreatedBy,Sitecore.ContentSearch</field>
  <field fieldName="parsedlanguage">Sitecore.ContentSearch.ComputedFields.ParsedLanguage,Sitecore.ContentSearch</field>
</fields>

FieldMap

The field map defines how a field is mapped between Coveo and Sitecore. Here is an example:

<fieldMap type="Coveo.SearchProvider.CoveoFieldMap, Coveo.SearchProvider">
  <param desc="coveoReflectionFactory" type="Coveo.Framework.Utils.CoveoReflectionFactory, Coveo.Framework" />
  <fieldNames hint="raw:AddFieldByFieldName">
    <fieldType fieldName='_id' settingType='Coveo.Framework.Configuration.FieldConfiguration, Coveo.Framework' type='Sitecore.Data.ID, Sitecore.Kernel' returnType='System.String'/>
    <fieldType fieldName='_uniqueid' settingType='Coveo.Framework.Configuration.FieldConfiguration, Coveo.Framework' type='Sitecore.Data.ItemUri, Sitecore.Kernel' returnType='System.String'/>
  </fieldNames>
  <externalFields hint="raw:AddExternalField">
    <field fieldName="author"/>
    <field fieldName="collection"/>
    <field fieldName="size" fieldTypeName="Number"/>
  </externalFields>
</fieldMap>

The fieldNames section defines how Sitecore template fields and Sitecore computed index fields are mapped between Coveo and Sitecore. For example, to use a Sitecore field in a facet UI component or to make it sortable, it must be defined in the fieldMap/fieldNames node. Some of the most common options that can be defined on the fieldType element are explained in the following table.

Note

Most changes to this section will be taken into account in Coveo only after the affected items are re-indexed (see Coveo for Sitecore indexing guide). The last column of the table indicates whether re-indexing is required.

On the other hand, the externalFields section defines how non-Sitecore fields are handled by Coveo for Sitecore. For example, to avoid field translation of the collection Coveo system field when used in a facet UI component, it must be defined in the fieldMap/externalFields node (see Make a Sitecore field facetable). The same configuration must be used for external source fields that don’t exist in Sitecore templates or computed index fields.

fieldNames

Parameter name Description Example value Default value Limitations Requires re-indexing

fieldName

Defines the name of the Sitecore template field or Sitecore computed index field to configure options for.

_uniqueId

Yes

includeForFreeTextSearch

Defines whether full-text search operations can be performed on this field.

true / false

false

Can be modified only on string fields.

Yes

isFacet

Defines whether facets can be bound to this field. This is also required for wildcard search.

true / false

String fields: false
Date, numeric, and long fields: true

Can be modified only on string fields.

Yes

isMultiValue

Defines whether this field contains many values. This is required for the "OR" and "AND" filtering in the facets.

true / false

false

Can be modified only on string fields.

Yes

isSortable

Defines whether search results can be sorted by this field.

true / false

String fields: false
Date, numeric, and long fields: true

Can be modified only on string fields.

Yes

isSourceSpecific

Defines whether the translation (addition of the "f" prefix and the source name hash suffix) should be used on this field.

true: field translation will be used
false: field translation won’t be used

Same as PreferSourceSpecificFields setting value, which is set to false by default.
See Upgrading from August 2018 (4.1.518.18) to September (4.1.590.21) for more information.

Yes

isDisplayField

Defines whether the field should be returned in search results.

true / false

true

Yes

useForRanking

Defines whether values used in a filter on this field are used for search results ranking calculation and highlighting.

true / false

false

Can be modified only on string fields.

No

useStemming

Defines whether to stem the query in a filter specific on this field.

true / false

false

Can be modified only on string fields.

No

useCacheForComputedFacet

Defines whether to load data in memory for index computed fields.

true / false

false

Can be modified only on date, numeric, and long fields.

No

useCacheForNestedQuery

Defines whether to load data required to perform nested queries in memory.

true / false

false

Can be modified only on date, numeric, and long fields.

No

useCacheForNumericQuery

Defines whether to load data of numeric queries in memory, which allows quicker numeric operations, including operations on dates.

true / false

false

Can be modified only on date, numeric, and long fields.

No

useCacheForSort

Defines whether to load the sort data in memory.

true / false

false

Can be modified only on date, numeric, and long fields.

No

returnType

Defines the type of field as seen by the index. For example, you want an id to be indexed as a string, so you would specify System.String. It needs to be used with a typeConverter.

System.String if you want a string, System.Int32 for an integer field, System.DateTime for a Date field, etc.

System.String

Yes

settingType

Defines the type of class to be used for the configuration of this field. This shouldn’t be changed.

Coveo.Framework.Configuration.
FieldConfiguration, Coveo.Framework

Coveo.Framework.Configuration.
FieldConfiguration, Coveo.Framework

N/A

typeConverter

Defines the converter to be used for this specific field. It must work with the type and the returnType; the converter should take a field of the type as input and then outputs the converted value of returnType.

Sitecore.ContentSearch.Converters.
IndexFieldGuidValueConverter, Sitecore.ContentSearch

null

Yes

externalFields

Parameter name Description Example value Default value Limitations Requires re-indexing

fieldName

Defines the name of the non-Sitecore field to make available in Sitecore.

size

No

fieldTypeName

Defines the type of the field seen by the Coveo components (Facet, Facet Range, Slider…​).

Number / Integer / date / datetime / string

string

No

FieldReaders

The FieldReaders node defines which .NET class should handle a specific Sitecore field type. You can easily customize how a field is read by specifying its type name. In the Sitecore.ContentSearch assembly, Sitecore already provides a few field readers for various types, such as Checkbox, Date, RichText, Image, Lookup, etc. You can also create your own field readers in .NET by inheriting the Sitecore.ContentSearch.FieldReaders.FieldReader class and overriding the GetFieldValue and GetIndexFieldName methods. For more details on how to achieve this, you can visit Sitecore’s technical blog or Sitecore’s official documentation portal.

<fieldReaders type="Sitecore.ContentSearch.FieldReaders.FieldReaderMap, Sitecore.ContentSearch">
  <mapFieldByTypeName hint="raw:AddFieldReaderByFieldTypeName">
    <fieldReader fieldTypeName="checkbox" fieldReaderType="Sitecore.ContentSearch.FieldReaders.CheckboxFieldReader, Sitecore.ContentSearch" />
    <fieldReader fieldTypeName="datetime" fieldReaderType="Sitecore.ContentSearch.FieldReaders.DateFieldReader, Sitecore.ContentSearch" />
    <fieldReader fieldTypeName="date" fieldReaderType="Sitecore.ContentSearch.FieldReaders.DateFieldReader, Sitecore.ContentSearch" />
  </mapFieldByTypeName>
</fieldReaders>

IndexFieldStorageValueFormatter

The index field storage value formatter is used to convert some field into a format recognized by the Coveo index. Here is an example:

<indexFieldStorageValueFormatter type="Coveo.SearchProvider.CoveoIndexFieldStorageValueFormatter, Coveo.SearchProvider">
<param type="Coveo.Framework.Utils.CoveoReflectionFactory, Coveo.Framework" desc="coveoReflectionFactory"/>
<conversionTypes hint="raw:AddConverter">
<conversionType type="Sitecore.ContentSearch.Converters.IndexFieldGuidValueConverter, Sitecore.ContentSearch" inputType="System.Guid"/>
<conversionType type="Sitecore.ContentSearch.Converters.IndexFieldIDValueConverter, Sitecore.ContentSearch" inputType="Sitecore.Data.ID"/>
<conversionType type="Sitecore.ContentSearch.Converters.IndexFieldSitecoreItemIDValueConvertor, Sitecore.ContentSearch" inputType="Sitecore.ContentSearch.SitecoreItemId">
<param type="Sitecore.ContentSearch.Converters.IndexFieldIDValueConverter, Sitecore.ContentSearch"/>
</conversionType>
<conversionType type="Sitecore.ContentSearch.Converters.IndexFieldSitecoreItemUniqueIDValueConvertor, Sitecore.ContentSearch" inputType="Sitecore.ContentSearch.SitecoreItemUniqueId">
<param type="Sitecore.ContentSearch.Converters.IndexFieldItemUriValueConvertor, Sitecore.ContentSearch"/>
</conversionType>
<conversionType type="Sitecore.ContentSearch.Converters.IndexFieldItemUriValueConvertor, Sitecore.ContentSearch" inputType="Sitecore.Data.ItemUri"/>
<conversionType type="Sitecore.ContentSearch.Converters.IndexFieldShortIDValueConverter, Sitecore.ContentSearch" inputType="Sitecore.Data.ShortID"/>
<conversionType type="Sitecore.ContentSearch.Converters.IndexFieldCultureInfoValueConverter, Sitecore.ContentSearch" inputType="System.Globalization.CultureInfo"/>
<conversionType type="Sitecore.ContentSearch.Converters.IndexableIdConverter, Sitecore.ContentSearch" inputType="Sitecore.ContentSearch.IIndexableId, Sitecore.ContentSearch"/>
<conversionType type="Sitecore.ContentSearch.Converters.IndexableUniqueIdConverter, Sitecore.ContentSearch" inputType="Sitecore.ContentSearch.IIndexableUniqueId, Sitecore.ContentSearch"/>
<conversionType type="Coveo.Framework.Conversion.DateTimeOffsetValueConverter, Coveo.Framework" inputType="System.DateTimeOffset"/>
<conversionType type="Coveo.Framework.Conversion.TimeSpanValueConverter, Coveo.Framework" inputType="System.TimeSpan"/>
<conversionType type="Coveo.Framework.Conversion.DateTimeValueConverter, Coveo.Framework" inputType="System.DateTime"/>
<conversionType type="Coveo.Framework.Conversion.BooleanValueConverter, Coveo.Framework" inputType="System.Boolean"/>
<conversionType type="Coveo.Framework.Conversion.FloatValueConverter, Coveo.Framework" inputType="System.Single"/>
<conversionType type="Coveo.Framework.Conversion.DecimalValueConverter, Coveo.Framework" inputType="System.Decimal"/>
<conversionType type="Coveo.Framework.Conversion.DoubleValueConverter, Coveo.Framework" inputType="System.Double"/>
</conversionTypes>
</indexFieldStorageValueFormatter>

The common options of the conversion types are explained in the following table.

Parameter name Description Example

inputType

Defines the type to which the conversion will be applied. It means that all fields with this type will be converted with the specified converter.

Sitecore.Data.ItemUri

type

Defines the type of converter to be used for this conversion type.

Sitecore.ContentSearch.Converters.
IndexFieldItemUriValueConvertor, Sitecore.ContentSearch

Notes

In the conversion process for fields, the CoveoFieldMap is used first if you specified a returnType and a typeConverter for a specific field. If it fails or if you have not specified anything, it will try to find the good converter in the IindexFieldStorageValueFormatter element. If the type of the field isn’t defined there, it will simply index the raw value of the field.

VirtualFieldProcessors

Some fields can be created outside of the Sitecore context and have a meaning only in the search context. Those aren’t real fields on Sitecore items, but fields created on-the-fly by the corresponding processor.

<virtualFields type="Sitecore.ContentSearch.VirtualFieldProcessorMap, Sitecore.ContentSearch">
  <processors hint="raw:AddFromConfiguration">
    <virtualFieldProcessor fieldName="daterange" type="Sitecore.ContentSearch.VirtualFields.DateRangeFieldProcessor, Sitecore.ContentSearch" />
    <virtualFieldProcessor fieldName="_lastestversion" type="Sitecore.ContentSearch.VirtualFields.LatestVersionFieldProcessor, Sitecore.ContentSearch" />
    <virtualFieldProcessor fieldName="_url" type="Sitecore.ContentSearch.VirtualFields.UniqueIdFieldProcessor, Sitecore.ContentSearch" />
    <virtualFieldProcessor fieldName="_content" type="Coveo.SearchProvider.Processors.ContentFieldProcessor, Coveo.SearchProviderBase" />
  </processors>
</virtualFields>

Miscellaneous configuration settings

Those are miscellaneous settings that are used to configure various modules of the Sitecore Search Provider. They can be found under the configuration/sitecore/coveo/defaultIndexConfiguration element.

CloudPlatformCommunicationFactory

The Coveo Platform Communication Factory is the factory responsible for enabling communication between Coveo and Sitecore. A typical configuration of this node looks like this:

<cloudPlatformCommunicationFactory type="Coveo.CloudPlatformClient.Communication.CloudPlatformCommunicationFactory, Coveo.CloudPlatformClient">
  <cloudCommunicationConfiguration type="Coveo.CloudPlatformClient.Configuration.CloudCommunicationConfiguration, Coveo.CloudPlatformClient" />
</cloudPlatformCommunicationFactory>

Using logging for debugging purposes

The Sitecore Search Provider uses the log4net logging library bundled with Sitecore. To enable logging, add the following node into the Coveo.SearchProvider.Custom.config file of your Sitecore instance. To enable logging in whatever part of the code, modify the logger’s name.

Note

The method below enables logging for the namespace Coveo. Therefore, any other class which uses log4net and which isn’t located in that namespace won’t log anything using that logger.

<log4net>
  <appender name="CoveoLogger" type="log4net.Appender.SitecoreLogFileAppender, Sitecore.Logging">
    <file value="$(dataFolder)/logs/Coveo.Search.{date}.txt" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%4t %d{ABSOLUTE} %-5p %m%n" />
    </layout>
  </appender>
  <logger name="Coveo" additivity="false">
    <level value="INFO" />
    <appender-ref ref="CoveoLogger" />
  </logger>
</log4net>