Coveo is a powerful and advanced cloud-based search and relevance platform designed to empower organizations to deliver highly personalized and engaging search and recommendation experiences. Whether you’re running a website, an e-commerce store, a customer service portal, or managing internal enterprise systems, Coveo helps businesses connect users with the most relevant content, products, or information — all based on their intent and context.
Coveo was created to solve one of the biggest challenges in the digital world: how to deliver truly relevant information to users quickly and efficiently. As the amount of data and content exploded online, traditional search engines struggled to keep up with user expectations for fast, personalized, and intuitive search experiences
This is why Coveo was built — to bring artificial intelligence (AI) and machine learning into the search experience. By understanding user behavior, preferences, and context, Coveo dramatically improves the relevance of search results, helping businesses increase engagement, reduce frustration, and drive more conversions.
In today’s fast-paced digital landscape, providing users with immediate access to the right information or products is no longer a luxury — it’s a necessity. Coveo addresses this need by enabling companies to unify data from multiple sources, apply advanced AI-driven relevance models, and continuously learn from user interactions to deliver smarter, faster search experiences.
SAP Hybris (now SAP Commerce Cloud) comes with Apache Solr as its default search engine. While Solr is powerful and flexible, it also presents some challenges that can impact businesses trying to deliver fast, personalized, and relevant search experiences:
Solr requires significant technical expertise to configure and maintain within the SAP Hybris environment. Hybris developers often need to spend a lot of time tuning Solr’s complex schema, handling indexing strategies, and managing the infrastructure. This can slow down project timelines and increase operational costs.
Personalization and AI capabilities are limited with the out-of-the-box Solr setup in Hybris. Solr doesn’t automatically learn from user behavior or adapt search results based on context. This means additional development effort is needed to build machine learning models or integrate third-party AI tools to achieve relevance that modern users expect.
Scaling and managing search infrastructure can be a challenge, especially during high-traffic sales events or product launches. Solr requires dedicated resources and careful scaling strategies, which adds to the operational complexity for Hybris shops.
Insights into search performance and user behavior are basic with Solr. Hybris teams may struggle to get actionable analytics that help optimize the search experience and improve conversions
Coveo comes in as a strong alternative. Coveo offers a cloud-hosted, AI-powered search platform that integrates smoothly with SAP Commerce Cloud (Hybris). It removes the heavy lifting around infrastructure management, providing automatic scaling and high availability. Coveo’s AI models learn from Hybris users’ interactions in real-time, delivering personalized and highly relevant search results without custom coding. Plus, its advanced analytics help businesses continuously optimize the search experience and drive more conversions.
For SAP Hybris users, Coveo reduces technical complexity, speeds up implementation, and enables smarter search experiences — making it a compelling choice for companies aiming to stand out with superior digital commerce.
SAP Commerce Cloud environment up and running (preferably version 2211+)
Access to Coveo Cloud Platform account (you can create a free trial on https://www.coveo.com/)
Administrator access to Hybris server and storefront codebase
Basic knowledge of SAP Commerce (Hybris) architecture and extension development
Basic knowledge of Maven, Git, and Hybris build processes
Create a Coveo Organization
Sign up at Coveo Cloud
Create a new organization for your project : https://platform.cloud.coveo.com.
Create a Project
Create Source
Navigate to Sources → New Source.
Choose Custom API Source for your SAP Commerce catalog.
Configure the source to receive data from your Hybris system.
Create a Search Token (optional)
This token will be used by the storefront to perform search queries securely.
Create Project
Project List
Create Source (Catalog)
Clone or download the Coveo SAP Commerce Connector from GitHub:
https://github.com/coveo/coveo-sap-commerce-connector
Copy the searchprovidercoveosearchservices extension to your SAP Commerce project under:
hybris/bin/custom/
Open localextensions.xml
Add the following entry:
<extension name="searchprovidercoveosearchservices"/>
Navigate to the platform folder:
cd hybris/bin/platform/
Set up the Ant environment:
Linux/macOS: source ./setantenv.sh
Windows: ./setantenv.bat
Run:
ant clean all
Locate and open the file:
electronics-search-configuration-example.impex
Update the following values according to your project setup:
CoveoSecretKey
CoveoSource
ConsumedDestination
You can adapt the other Impex lines based on your specific requirements.
For minimal setup, follow the sample as-is.
Alternatively, you can replicate the Impex setup through Backoffice, using the provided UI steps if preferred.
Start your SAP Commerce installation by running the ./hybrisserver.sh script.
Open the Hybris Administration console (HAC) at https://localhost:9002/hac/platform/update. You can also navigate to the Update page by clicking Platform → Update in the top menu.
Find and select the checkboxes for:
searchprovidercoveosearchservices (required to create the new search provider)
Update running system
Localize types
At the top of the page, click the Update button.
This guide outlines the steps to integrate Coveo with SAP Commerce Cloud by replacing Solr and pushing catalog data to Coveo via API.
Navigate to:
System → API → Destinations → Coveo Source
Click the plus (+) icon to create a new source.
In the modal:
ID: Enter a unique, human-readable identifier.
Click Finish.
Select the new source from the list.
Under the General tab:
Fill in the Name.
Select the correct Object Type:
AVAILABILITY for availability sources
PRODUCTANDVARIANT for catalog products/variants
If using PRODUCTANDVARIANT, specify the Language, Currency, and Country.
Click Save.
Go to: System → API → Destinations → Consumed Destinations
Click + to create a new destination.
In the modal:
ID: Enter a unique identifier.
URL: Paste the Stream API URL from the Coveo source.
Active: Ensure this is checked.
Destination Target: Select Default_Template (required but ignored by the extension).
Click Finish.
Open the created destination.
Go to the Destination Configuration tab.
Double-click Credential → Select Create Credential → Consumed OAuth Credential.
Enter:
ID: e.g., CoveoCredential
Client ID: e.g., CoveoClientID
Click Finish.
Reopen the credential field, enter the API Key as the Client Secret.
Save all changes.
Return to: System → API → Destinations → Coveo Source.
Select your source and open the General tab.
Set Consumed Destination to the one created earlier.
Click Save.
Go to: System → Search and Navigation → Search Provider Configurations.
Click the dropdown next to + → Select Coveo Search Provider Configuration.
Fill in:
Identifier and Name
Select all Coveo sources created
Click Finish.
Go to: System → Search and Navigation → Index Configurations
Click the dropdown next to + → Select CoveoSnIndexConfiguration
Provide:
Identifier and Name
Select the previously created Search Provider Configuration
Proceed through:
Skip Index Types
Select required Languages, Currencies, and Countries
Click Finish.
Navigate to: System → Types → ServicelayerJob
Create two jobs:
fullCoveoSnIndexerJob
incrementalCoveoSnIndexerJob
Go to: System → Search and Navigation → Index Types
Click + and define:
Identifier and Name
Composed Type (e.g., Warehouse, Product)
Index Configuration: Select the one from Step 6
In Cron Jobs:
Create a cron job (full or incremental)
Select correct Job Definition (fullCoveoSnIndexerJob or incrementalCoveoSnIndexerJob)
Set Indexer Item Source with a FlexibleSearch query
Link the catalog and set snIdentityProvider as the identity provider.
Select the Index Type (full/incremental) → Switch to Fields tab.
Add a new field:
Identifier: objectType
Field Type: TEXT
Value Provider: coveoObjectTypeSnIndexerValueProvider
Update project.properties to reflect your type mappings:
coveo.availability.typecodes=Warehouse
coveo.product.typecodes=Product
coveo.variant.typecodes=VariantProduct
Use standard and Coveo-specific value providers to transform or map data fields.
See Coveo documentation for a full list of provider names and transformation logic.
For each index type, go to Fields.
Remove unnecessary fields to optimize indexing time.
Ensure field identifiers match the mappings defined in the Coveo Admin Console.
Go to: System → Search and Navigation → Index Types
Open the index type → go to Cron Jobs
Enable and schedule the cronjob
Go to Administration tab → assign the store
Click Run Indexer and select the appropriate Cron job
After the indexing process completes successfully in SAP Commerce, you can verify that product data has been pushed to Coveo by following these steps:
Log into the Coveo Administration Console
👉 https://platform.cloud.coveo.com
Navigate to the Content Browser
Go to Content > Content Browser
From the dropdown menu, select the source associated with your SAP Commerce catalog (e.g., Electronics Product Source)
Once your SAP Commerce (Hybris) catalog is successfully indexed into Coveo, you can integrate Coveo search results back into your Hybris frontend (e.g., storefront or custom APIs) using Coveo’s REST Search API.
Request
curl -X 'POST' \
'https://platform.cloud.coveo.com/rest/search/v2?organizationId=<your_organizationId>&viewAllContent=true' \
-H 'accept: application/json' \
-H 'Authorization: Bearer x0xxxxxxxxxxxxxxxxxxxd1b9' \
-H 'Content-Type: application/json' \
-d '{
"q": "AC Power Adapter ACK-E2"
}
Response
{
"totalCount": 1,
"totalCountFiltered": 1,
"duration": 67,
"indexDuration": 17,
"requestDuration": 65,
"searchUid": "ae077f16-625e-45f9-8bxxxxxxxxx",
"pipeline": "default",
"apiVersion": 2,
"queryCorrections": [],
"index": "pqwrc7liq2vwuk2xxxxxxxxxxxxxxxxxxxxxxxx,
"indexRegion": "us-east-1",
"indexToken": "cHF3cmM3bGlxMnZ3dWsyNHpuNGtjNWIyxxxxxxxxxxxxxxxxxxxxx==",
"refinedKeywords": [],
"triggers": [],
"termsToHighlight": {
"ac": [],
"power": [],
"adapter": []
},
"phrasesToHighlight": {
"ack e2": {
"ack": [],
"e2": []
}
},
"groupByResults": [],
"facets": [],
"suggestedFacets": [],
"categoryFacets": [],
"results": [
{
"title": "AC Power Adapter ACK-E2",
"uri": "product://594471",
"printableUri": "product://594471",
"clickUri": "https://electronics.local:9002/expertshybrisstorefront/Open-Catalogue/Components/Power-Supplies/Power-Adapters-%26-Inverters/AC-Power-Adapter-ACK-E2/p/594471",
"uniqueId": "42.46180$product://594471",
"excerpt": "",
"firstSentences": null,
"summary": null,
"flags": "SkipSentencesScoring;HasAllMetaDataStream",
"hasHtmlVersion": false,
"hasMobileHtmlVersion": false,
"score": 5158,
"percentScore": 81.66549,
"rankingInfo": null,
"rating": 0,
"isTopResult": false,
"isRecommendation": false,
"isUserActionView": false,
"titleHighlights": [
{
"length": 2,
"offset": 0
},
{
"length": 5,
"offset": 3
},
{
"length": 7,
"offset": 9
},
{
"length": 6,
"offset": 17
}
],
"firstSentencesHighlights": [],
"excerptHighlights": [],
"printableUriHighlights": [],
"summaryHighlights": [],
"parentResult": null,
"childResults": [],
"totalNumberOfChildResults": 0,
"absentTerms": [],
"raw": {
"systitle": "AC Power Adapter ACK-E2",
"sysurihash": "bKMUBHppñcB1iLhq",
"urihash": "bKMUBHppñcB1iLhq",
"sysuri": "product://594471/",
"systransactionid": 239,
"sysindexeddate": 1748265469000,
"permanentid": "af035fed88c1cb7eb91d46e16e41de17e9b2183688f6bb0fa9e54f6a4dbd",
"transactionid": 239,
"title": "AC Power Adapter ACK-E2",
"date": 1748265469000,
"objecttype": "product",
"rowid": 1748265469612053500,
"size": 2718,
"clickableuri": "https://electronics.local:9002/expertshybrisstorefront/Open-Catalogue/Components/Power-Supplies/Power-Adapters-%26-Inverters/AC-Power-Adapter-ACK-E2/p/594471",
"syssource": "electronics-en-USD-US-source",
"orderingid": 1748265436691,
"syssize": 2718,
"sysdate": 1748265469000,
"primaryid": "MJFU2VKCJBYHBQ5RMNBDC2KMNBYS4NBWGE4DALTEMVTGC5LMOQ",
"wordcount": 0,
"source": "electronics-en-USD-US-source",
"collection": "default",
"indexeddate": 1748265469000,
"sysclickableuri": "https://electronics.local:9002/expertshybrisstorefront/Open-Catalogue/Components/Power-Supplies/Power-Adapters-%26-Inverters/AC-Power-Adapter-ACK-E2/p/594471",
"sysrowid": 1748265469612053500,
"uri": "product://594471/",
"syscollection": "default"
},
"Title": "AC Power Adapter ACK-E2",
"Uri": "product://594471",
"PrintableUri": "product://594471",
"ClickUri": "https://electronics.local:9002/expertshybrisstorefront/Open-Catalogue/Components/Power-Supplies/Power-Adapters-%26-Inverters/AC-Power-Adapter-ACK-E2/p/594471",
"UniqueId": "42.46180$product://594471",
"Excerpt": "",
"FirstSentences": null
}
],
"extendedResults": {}
}
You’ll need to implement a service (e.g., using a Spring service or controller) in SAP Commerce that calls the Coveo Search API.
Example REST Call (Java using RestTemplate):
String url = "https://platform.cloud.coveo.com/rest/search/v2";
HttpHeaders headers = new HttpHeaders();
headers.setBearerAuth("your-search-token");
headers.setContentType(MediaType.APPLICATION_JSON);
String payload = """
{
"q": "laptop",
"firstResult": 0,
"numberOfResults": 10,
"facets": [
{ "field": "brand", "type": "specific" }
]
}
""";
HttpEntity<String> request = new HttpEntity<>(payload, headers);
ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);
Expose a Hybris controller endpoint that wraps the call to the Coveo API and returns search results to your frontend:
@RequestMapping(value = "/search/coveo", method = RequestMethod.GET)
@ResponseBody
public String searchProducts(@RequestParam String query) {
return coveoSearchService.search(query); // where coveoSearchService implements the logic above
}
Create UI page and integrate this API response