Search engines¶
Tune what a search returns and in what order. A product search engine holds the search steps (field weights, typo tolerance, stock and hidden-product handling), boosts, elevates, excludes and personalization behind a website's search configs. Content search engines run the link content queries (categories, site pages, blog posts, brands) shown alongside product results.
Two things set engines apart from the rest of the Search tools:
- No draft. A search config has a draft and a live state; its engine has neither. An edit to an engine is live for every config using it as soon as it is saved. Boosts can take up to five minutes to reach every search, the lifetime of their cache.
- Shared. Every search config references exactly one product engine, and most websites have a single engine serving all of theirs.
search_listProductEnginesshows which configs each engine serves, so check that before you edit. To try a different tuning without touching live search, create a second engine, point a config at it withsearch_setConfigProductEngine, and publish that draft from My Hello Retail.
Tips & tricks¶
Pick the card that matches what you're doing. Each prompt is ready to paste into your assistant.
See who shares the engine
An engine edit reaches every search config using it, live, with no draft in between. Start by finding out which configs that is.
Lift what should rank first
A boost lifts every product whose field has a value: brand Nike, a category path, an extraData flag. Negative amounts bury instead. Values must match the index exactly, so read them with productData_getFieldValues rather than guessing.
Pin or hide a product for a query
Elevates pin one product to the top when the visitor's search matches a query; excludes hide one. Both are keyed by the query and the product's URL, so a merchandising list is easy to review and replace in one go.
Try a new tuning on a spare engine
Create a second engine, tune it, and point a search config at it. The assignment is a normal config edit, so it lands in a draft you publish yourself, and live search keeps its engine until then.
search_listProductEngines¶
List the product search engines of a website. A product search engine holds the tuning that decides which products a search returns and in which order: search steps, boosts, elevates, excludes and personalization. usedByConfigKeys names the search configs each engine serves, which is the blast radius of an edit. Most websites have a single engine shared by all their search configs.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
Example request & response
search_getProductEngine¶
Get the full settings of one product search engine. Search steps run in order and the search stops at the first step that finds results, so later steps are fallbacks; typically each step relaxes the matching of the one before it. Within a step, fields maps a field name to its relative weight on match relevance, and availableStepFields lists the names a step can weight. The step fields are described under search_updateProductEngine.
exactProductNumberSearch prepends an implicit exact product-number step. filterByGroupingKey collapses product variants sharing a grouping key into one result. facetLimit is the maximum number of filter values returned per field, read-only here.
Boosts, elevates, excludes and personalization are read with their own tools: search_getProductEngineBoosts, search_getProductEngineElevates, search_getProductEngineExcludes and search_getPersonalization.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the product search engine, from search_listProductEngines. |
Example request & response
{
"id": 0,
"name": "<string>",
"exactProductNumberSearch": false,
"filterByGroupingKey": false,
"useAdditionalSearchTerms": false,
"facetLimit": 100,
"searchSteps": [
{
"fields": {
"title": 3,
"keywords": 2,
"brand": 1
},
"minimumShouldMatch": "1",
"fuzzy": true,
"fuzzNumbers": true,
"exactMatch": false,
"splitSearchString": false,
"showOutOfStock": false,
"showHiddenProducts": false,
"productScoreBoost": 0.0
}
],
"availableStepFields": [
"productNumber",
"title",
"keywords",
"description",
"brand",
"hierarchies"
]
}
search_updateProductEngine¶
Update the settings of a product search engine. All parameters are optional and updates are partial: omitted fields are left unchanged. searchSteps is a full replacement when provided, so read the current steps with search_getProductEngine first and pass every field of every step explicitly.
Write operation applied to live search
Engines have no draft. The change takes effect immediately for every search config using the engine; check usedByConfigKeys in search_listProductEngines first. Your assistant will ask for confirmation before this runs.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the product search engine to update, from search_listProductEngines. |
name | string | No | New name of the engine. |
exactProductNumberSearch | boolean | No | Prepend an implicit exact product-number match step before the configured steps. |
filterByGroupingKey | boolean | No | Collapse product variants sharing a grouping key into one result. |
useAdditionalSearchTerms | boolean | No | Also match the products' additional search terms. |
searchSteps | array | No | The complete ordered list of search steps, replacing the current list. Fields per step are described below. |
Each step has these fields, and all of them are required:
| Name | Type | Required | Description |
|---|---|---|---|
fields | object | Yes | Field name to relative weight, such as {"title": 3, "brand": 1}. Names come from availableStepFields; a weight of 0 leaves the field out of the step, and at least one field needs a weight above 0. |
minimumShouldMatch | string | Yes | How many of the query's words must match: a count such as 1, or a percentage such as 100% for all of them. |
fuzzy | boolean | Yes | Tolerate typos: each word also matches with one edit, or two for words of seven characters or more. Ignored when exactMatch is true. |
fuzzNumbers | boolean | Yes | Apply the typo tolerance to mostly numeric words too, such as product numbers. |
exactMatch | boolean | Yes | Match the whole query as one exact phrase, with no typo tolerance and no prefix matching. |
splitSearchString | boolean | Yes | Also match the query's words inside compound words. |
showOutOfStock | boolean | Yes | Include products that are out of stock. |
showHiddenProducts | boolean | Yes | Include products hidden from search. |
productScoreBoost | number | Yes | How much a product's popularity score weighs in the ranking, 0 or more. 0 ranks on text relevance alone. |
Example request & response
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_updateProductEngine",
"arguments": {
"websiteUuid": "<string>",
"engineId": 0,
"filterByGroupingKey": true,
"searchSteps": [
{
"fields": {
"title": 5,
"keywords": 2,
"brand": 1
},
"minimumShouldMatch": "100%",
"fuzzy": false,
"fuzzNumbers": true,
"exactMatch": false,
"splitSearchString": false,
"showOutOfStock": false,
"showHiddenProducts": false,
"productScoreBoost": 0.5
}
]
}
}
}
The same shape as search_getProductEngine, with the new settings applied.
search_createProductEngine¶
Create an additional product search engine with default settings, for example to try an alternative tuning without touching the engine live configs use. The new engine serves no search config until one is pointed at it with search_setConfigProductEngine.
Write operation
This tool creates a new engine. It changes no search results until a config is pointed at it. Your assistant will ask for confirmation before this runs.
Most websites need only their one existing engine, so prefer tuning that one unless a separate engine is genuinely wanted.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
name | string | Yes | Name of the new engine. |
Example request & response
The same shape as search_getProductEngine, with one default step.
search_getProductEngineBoosts¶
Get the boosts of a product search engine. A boost raises (positive) or lowers (negative) the relevance of every product whose field has value, such as brand Nike by 2. The boost is an integer from -10 to 10, the same scale as the dashboard. formattedValue is the value as the dashboard shows it; hierarchy values render kids$shoes as Kids > Shoes.
availableFields lists the fields a boost can target: the standard fields plus any extraData fields indexed for search (manage indexing with dataFields_getProductFields and dataFields_updateProductFieldsIndexing). Use productData_getFieldValues to see the values a field actually has. Query-specific boosts (query rules) are configured in My Hello Retail and are not returned here.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the product search engine, from search_listProductEngines. |
Example request & response
search_updateProductEngineBoosts¶
Replace the boosts of a product search engine. This is a full replacement: the provided list becomes the complete set of engine-level boosts. Pass an empty list to remove all boosts, and use search_getProductEngineBoosts first to read the current entries when only adding or changing one. Query-specific boosts (query rules) are separate and untouched by this tool.
Write operation applied to live search
Engines have no draft. The new boosts reach every search config using the engine within five minutes, the lifetime of the boost cache. Your assistant will ask for confirmation before this runs.
The same field can be boosted on several values (brand Nike and brand Adidas), but each field and value pair can appear only once.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the product search engine to update, from search_listProductEngines. |
boosts | array | Yes | The complete list of boosts, replacing the current list. Fields per entry are described below. |
Each entry has these fields:
| Name | Type | Required | Description |
|---|---|---|---|
field | string | Yes | A field from search_getProductEngineBoosts's availableFields. extraData fields must first be indexed for search (see dataFields_updateProductFieldsIndexing). |
value | string | Yes | The exact indexed value the field must have. Hierarchy values use the raw $-separated encoding (kids$shoes for Kids > Shoes); productData_getFieldValues lists the real values. |
boost | integer | Yes | From -10 to 10, the same scale as the dashboard. Positive amounts lift the matching products and negative amounts bury them. |
Example request & response
The same shape as search_getProductEngineBoosts, with the new list.
search_getProductEngineElevates¶
Get the elevates of a product search engine. An elevate pins a specific product to the top of the results whenever the visitor's search matches query; the product is identified by its url.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the product search engine, from search_listProductEngines. |
Example request & response
search_updateProductEngineElevates¶
Replace the elevates of a product search engine: the products pinned to the top of the results for matching queries. This is a full replacement: the provided list becomes the complete set of elevates. Pass an empty list to remove all elevates, and use search_getProductEngineElevates first when only adding or changing one.
Write operation applied to live search
Engines have no draft. The change takes effect immediately for every search config using the engine. Your assistant will ask for confirmation before this runs.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the product search engine to update, from search_listProductEngines. |
elevates | array | Yes | The complete list of elevates, replacing the current list. Fields per entry are described below. |
Each entry has these fields, and each query and url pair can appear only once:
| Name | Type | Required | Description |
|---|---|---|---|
query | string | Yes | The search term that triggers the pin. |
url | string | Yes | The full URL of the product to pin. |
Example request & response
The same shape as search_getProductEngineElevates, with the new list.
search_getProductEngineExcludes¶
Get the excludes of a product search engine. An exclude hides a specific product from the results whenever the visitor's search matches query; the product is identified by its url.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the product search engine, from search_listProductEngines. |
Example request & response
search_updateProductEngineExcludes¶
Replace the excludes of a product search engine: the products hidden from the results for matching queries. This is a full replacement: the provided list becomes the complete set of excludes. Pass an empty list to remove all excludes, and use search_getProductEngineExcludes first when only adding or changing one.
Write operation applied to live search
Engines have no draft. The change takes effect immediately for every search config using the engine. Your assistant will ask for confirmation before this runs.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the product search engine to update, from search_listProductEngines. |
excludes | array | Yes | The complete list of excludes, replacing the current list. Fields per entry are described below. |
Each entry has these fields, and each query and url pair can appear only once:
| Name | Type | Required | Description |
|---|---|---|---|
query | string | Yes | The search term that triggers the hide. |
url | string | Yes | The full URL of the product to hide. |
Example request & response
The same shape as search_getProductEngineExcludes, with the new list.
search_getPersonalization¶
Get the personalization settings of a product search engine. Personalization boosts the products matching the individual visitor's affinities: each personalized field (product.brand, say) carries a boostValue from 0 to 10 weighting how strongly the visitor's affinity for that field's values influences ranking. allowedFields are the fields the website's subscription permits; availableFields is the full list. The hierarchy levels are presented as one product.hierarchy entry.
Requires Search personalization on the website's subscription in addition to Search.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the product search engine, from search_listProductEngines. |
Example request & response
search_updatePersonalization¶
Replace the personalization settings of a product search engine. This is a full replacement: the provided list becomes the complete set of personalized fields. Pass an empty list to disable personalization, and use search_getPersonalization first when only adding or changing one.
Write operation applied to live search
Engines have no draft. The change takes effect immediately for every search config using the engine. Your assistant will ask for confirmation before this runs.
Requires Search personalization on the website's subscription in addition to Search.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the product search engine to update, from search_listProductEngines. |
personalizedFields | array | Yes | The complete list of personalized fields, replacing the current list. Fields per entry are described below. |
Each entry has these fields, and each field can appear only once:
| Name | Type | Required | Description |
|---|---|---|---|
field | string | Yes | A field from search_getPersonalization's allowedFields. |
boostValue | integer | Yes | From 0 to 10, weighting how strongly the visitor's affinity for the field influences ranking. |
Example request & response
The same shape as search_getPersonalization, with the new list.
search_listContentEngines¶
List the content search engines of a website. A content search engine executes the link content (content search) queries of the website's search configs, matching categories, site pages, blog posts or brands alongside product results. Each engine handles one contentType: CATEGORY, SITE_PAGE, BLOG_POST or BRAND.
Which engine a search config uses is set per config with search_updateLinkContent, which also creates a default engine per content type on demand, so there is no create tool here. This tool and search_getContentEngine and search_updateContentEngine manage the engines' own tuning.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
Example request & response
search_getContentEngine¶
Get the full settings of one content search engine. Search steps run in order and the search stops at the first step that finds results, so later steps are fallbacks. Within a step, fields maps a field name to its relative weight on match relevance, and availableStepFields lists the names a step can weight. The step fields are described under search_updateContentEngine.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the content search engine, from search_listContentEngines. |
Example request & response
{
"id": 0,
"name": "<string>",
"contentType": "CATEGORY",
"searchSteps": [
{
"fields": {
"title": 3,
"keywords": 1
},
"minimumShouldMatch": "1",
"fuzzy": true,
"fuzzNumbers": true,
"exactMatch": false,
"splitSearchString": false
}
],
"availableStepFields": [
"title",
"keywords",
"description",
"hierarchy"
]
}
search_updateContentEngine¶
Update the settings of a content search engine. All parameters are optional and updates are partial: omitted fields are left unchanged. searchSteps is a full replacement when provided, so read the current steps with search_getContentEngine first and pass every field of every step explicitly.
Write operation applied to live search
Engines have no draft. The change takes effect immediately for every search config whose link content uses the engine. Your assistant will ask for confirmation before this runs.
| Name | Type | Required | Description |
|---|---|---|---|
websiteUuid | string | Yes | The UUID of the customer's website in Hello Retail. Use website_getInfo to look up available websites, or find it in my.helloretail.com under Settings → Website Settings → Website Unique Id. |
engineId | integer | Yes | The id of the content search engine to update, from search_listContentEngines. |
name | string | No | New name of the engine. |
searchSteps | array | No | The complete ordered list of search steps, replacing the current list. Fields per step are described below. |
Each step has these fields, and all of them are required. They behave as on a product engine, without the product-only stock, hidden-product and popularity settings:
| Name | Type | Required | Description |
|---|---|---|---|
fields | object | Yes | Field name to relative weight, such as {"title": 3, "hierarchy": 1}. Names come from availableStepFields; a weight of 0 leaves the field out of the step, and at least one field needs a weight above 0. |
minimumShouldMatch | string | Yes | How many of the query's words must match: a count such as 1, or a percentage such as 100% for all of them. |
fuzzy | boolean | Yes | Tolerate typos: each word also matches with one edit, or two for words of seven characters or more. Ignored when exactMatch is true. |
fuzzNumbers | boolean | Yes | Apply the typo tolerance to mostly numeric words too. |
exactMatch | boolean | Yes | Match the whole query as one exact phrase, with no typo tolerance and no prefix matching. |
splitSearchString | boolean | Yes | Also match the query's words inside compound words. |
Example request & response
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search_updateContentEngine",
"arguments": {
"websiteUuid": "<string>",
"engineId": 0,
"name": "Categories, title first",
"searchSteps": [
{
"fields": {
"title": 4,
"hierarchy": 1
},
"minimumShouldMatch": "1",
"fuzzy": true,
"fuzzNumbers": false,
"exactMatch": false,
"splitSearchString": false
}
]
}
}
}
The same shape as search_getContentEngine, with the new settings applied.