Suggestions can be used to implement a basic auto-complete functionality for your storefront search.
With a Query Suggestions request you provide some text as input for which the endpoint returns terms that you can use for the full text search on the Product Projection Search API.
This API was previously called Product Suggestions.
The equivalent GraphQL query is
productProjectionsSuggest.Prerequisites
Activated Product Projection Search API
The Search Term Suggestions API is not active for the Project by default.
If the API is deactivated, the Query Suggestions endpoint returns a SearchDeactivated error.
To activate the feature for your Project, activate the Product Projection Search API.
Defined search keywords
The terms returned with the Suggestions are specified in the
searchKeyword field of the ProductData.
Add SearchKeywords together with tokenizers to your Products to get the most relevant Suggestions returned.Representations
SuggestionResult
/searchKeywords.[a-z]{2}(-[A-Z]{2})?/Array of Suggestion | The result may contain multiple Suggestions identified by their Locale.
See Suggestions for two languages. |
{
"searchKeywords.de": [
{
"text": "Schweizer Messer"
}
],
"searchKeywords.en": [
{
"text": "Multi tool"
}
]
}Suggestion
textString | The suggested text. |
Query Suggestions
GET
https://api.{region}.commercetools.com/{projectKey}/product-projections/suggest
OAuth 2.0 Scopes:
view_products:{projectKey}view_published_products:{projectKey}Path parameters:
regionString | Region in which the Project is hosted. |
projectKeyString | key of the Project. |
Query parameters:
fuzzyBoolean | If set to true, fuzzy search is applied on the text to analyze.Default: false |
limitInt | Controls how many suggestions per language the SuggestionResult will contain.
The default limit is 10 Suggestions per language and the maximum is 100.Default: 10Maximum: 100 |
searchKeywords.<locale>String | The input text provided for the language specified as Locale. The parameter can be passed multiple times. |
stagedBoolean | If set to true (possible only while using the view_products scope), staged projections is queried.Default: false |
Response:
200as
application/jsoncurl --get https://api.{region}.commercetools.com/{projectKey}/product-projections/suggest -i \
--header "Authorization: Bearer ${BEARER_TOKEN}"{
"searchKeywords.de": [
{
"text": "Schweizer Messer"
}
],
"searchKeywords.en": [
{
"text": "Multi tool"
}
]
}Example queries
Consider a Product with the following SearchKeywords:
{
"en": [
{
"text": "Multi tool"
},
{
"text": "Swiss Army Knife",
"suggestTokenizer": {
"type": "whitespace"
}
}
],
"de": [
{
"text": "Schweizer Messer",
"suggestTokenizer": {
"type": "custom",
"inputs": ["schweizer messer", "offiziersmesser", "sackmesser"]
}
}
]
}
Suggestions for one language
No tokenizer
Imagine we use
multi as input text to get a search term Suggestion. In the SearchKeywords, we have the text "Multi tool" defined, but no tokenizer assigned to it:{
"en": [
{
"text": "Multi tool"
}
]
}
The query with
searchKeywords.en=multi returns the following result since multi is a prefix of Multi tool:{ "searchKeywords.en": [{ "text": "Multi tool" }] }
However, the query with
searchKeywords.en=tool does not return any result since Multi tool does not have a tokenizer assigned in the SearchKeywords that would recognize tool as part of the word.Whitespace tokenizer
Now, we look at a search keyword with a whitespace tokenizer assigned to it;
{
"en": [
{
"text": "Swiss Army Knife",
"suggestTokenizer": {
"type": "whitespace"
}
}
]
}
The query with
searchKeywords.en=kni returns "Swiss Army Knife" as the result since the whitespace tokenizer recognizes Knife as part of the keyword. and kni is a prefix of Knife:{ "searchKeywords.en": [{ "text": "Swiss Army Knife" }] }
Custom tokenizer
Consider following example for the German keyword
"Schweizer Messer" assigned to a custom tokenizer for multiple inputs:{
"de": [
{
"text": "Schweizer Messer",
"suggestTokenizer": {
"type": "custom",
"inputs": ["schweizer messer", "offiziersmesser", "sackmesser"]
}
}
]
}
The query with
searchKeywords.de=offiz returns "Schweizer Messer" as result since offiz is a prefix of one of the tokenizer inputs offiziersmesser:{ "searchKeywords.de": [{ "text": "Schweizer Messer" }] }
Suggestions for two languages
You can query for suggestions for two languages in one request by providing
searchKeyword parameters with two different Locales:
searchKeywords.de=offiz&searchKeywords.en=multi.
The returned SuggestionResult contains suggestions for both languages:{
"searchKeywords.de": [{ "text": "Schweizer Messer" }],
"searchKeywords.en": [{ "text": "Multi tool" }]
}