Skip to content

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_listProductEngines shows 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 with search_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.

Blast radius

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.

List the product search engines for my website and which search configs use each one.
Boosts

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.

Show the boosts on my product search engine, then boost the brand Nike by 2 and bury the brand Adidas by -2.
Pins

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.

When someone searches for "running shoes", pin <PRODUCT URL> to the top of the results on my product search engine.
Experiments

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.

Create a product search engine called "Title first" with title weighted 5 and brand 1, point my mobile search config at it, and tell me where to publish the draft.

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_listProductEngines",
    "arguments": {
      "websiteUuid": "<string>"
    }
  }
}
[
  {
    "id": 0,
    "name": "<string>",
    "createdAt": "<string>",
    "modifiedAt": "<string>",
    "stepCount": 1,
    "usedByConfigKeys": [
      "<string>"
    ]
  }
]

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_getProductEngine",
    "arguments": {
      "websiteUuid": "<string>",
      "engineId": 0
    }
  }
}
{
  "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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_createProductEngine",
    "arguments": {
      "websiteUuid": "<string>",
      "name": "Title first"
    }
  }
}

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_getProductEngineBoosts",
    "arguments": {
      "websiteUuid": "<string>",
      "engineId": 0
    }
  }
}
{
  "engineId": 0,
  "engineName": "<string>",
  "boosts": [
    {
      "field": "brand",
      "value": "Nike",
      "formattedValue": "Nike",
      "boost": 2
    }
  ],
  "availableFields": [
    "<string>"
  ]
}

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_updateProductEngineBoosts",
    "arguments": {
      "websiteUuid": "<string>",
      "engineId": 0,
      "boosts": [
        {
          "field": "brand",
          "value": "Nike",
          "boost": 2
        },
        {
          "field": "hierarchies",
          "value": "kids$shoes",
          "boost": -2
        }
      ]
    }
  }
}

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_getProductEngineElevates",
    "arguments": {
      "websiteUuid": "<string>",
      "engineId": 0
    }
  }
}
{
  "engineId": 0,
  "engineName": "<string>",
  "elevates": [
    {
      "query": "running shoes",
      "url": "https://shop.example/p/123"
    }
  ]
}

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_updateProductEngineElevates",
    "arguments": {
      "websiteUuid": "<string>",
      "engineId": 0,
      "elevates": [
        {
          "query": "running shoes",
          "url": "https://shop.example/p/123"
        }
      ]
    }
  }
}

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_getProductEngineExcludes",
    "arguments": {
      "websiteUuid": "<string>",
      "engineId": 0
    }
  }
}
{
  "engineId": 0,
  "engineName": "<string>",
  "excludes": [
    {
      "query": "running shoes",
      "url": "https://shop.example/p/456"
    }
  ]
}

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_updateProductEngineExcludes",
    "arguments": {
      "websiteUuid": "<string>",
      "engineId": 0,
      "excludes": [
        {
          "query": "running shoes",
          "url": "https://shop.example/p/456"
        }
      ]
    }
  }
}

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_getPersonalization",
    "arguments": {
      "websiteUuid": "<string>",
      "engineId": 0
    }
  }
}
{
  "engineId": 0,
  "allowedFields": [
    "product.brand",
    "product.hierarchy"
  ],
  "availableFields": [
    "product.pi.budgetZone",
    "product.pi.productCluster",
    "product.brand",
    "product.hierarchy",
    "product.extraData.color"
  ],
  "personalizedFields": [
    {
      "field": "product.brand",
      "boostValue": 2
    }
  ]
}

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_updatePersonalization",
    "arguments": {
      "websiteUuid": "<string>",
      "engineId": 0,
      "personalizedFields": [
        {
          "field": "product.brand",
          "boostValue": 2
        },
        {
          "field": "product.hierarchy",
          "boostValue": 1
        }
      ]
    }
  }
}

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_listContentEngines",
    "arguments": {
      "websiteUuid": "<string>"
    }
  }
}
[
  {
    "id": 0,
    "name": "<string>",
    "contentType": "CATEGORY",
    "createdAt": "<string>",
    "modifiedAt": "<string>"
  }
]

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
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "search_getContentEngine",
    "arguments": {
      "websiteUuid": "<string>",
      "engineId": 0
    }
  }
}
{
  "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.