Skip to main content

Searching Configuration

Source JEXL Mapping

The displayed fields in a search response can be customized using JEXL mappings.
This allows you to transform and map document fields dynamically before they are returned in a result.

Field Availability

Only fields that are defined in the search mapping can be used in mapping functions. If a field is not part of the search mapping, it will not be available in the search response and therefore cannot be referenced by any mapping function.

Trick: If you need a field for intermediate transformations but don't want it in the final result, map the field in the search mapping first, then use removeField to exclude it from the response. This way, the field is available for other functions (e.g., replace, firstField) during processing but won't appear in the output.

jexl:a.replace('${internalCode} - ${sku}').removeField('internalCode')

The following mapping functions are available:


replace

Description:
Replace values using placeholders from the document.

Example:

jexl:a.replace('${sku} - ${supplierId}').replace('${sku}')

When to use: Use when you want to combine or format multiple fields into a single string (e.g., SKU and supplier ID).


firstValue

Description: Take the first element of an array. If the value is not an array, the original value is used.

Example:

jexl:a.firstValue('customerArticleNumbers')

When to use: Use when you only need one value from a list (e.g., the primary customer article number).


concat

Description: Concatenate an array of values with a separator.

Example:

jexl:a.concat('title', ' ')

When to use: Use when you want to join multiple values into a single string (e.g., all titles, tags, or categories).


firstField

Description: Use the first non-null value from a list of fields.

Example:

jexl:a.firstField('title', 'name')

When to use: Use when there are fallback fields and you want to pick the first available (e.g., prefer title, else use name).


removeField

Description: Remove a field from the document.

Example:

jexl:a.removeField('myField')

When to use: Use when a field should not be indexed or exposed (e.g., internal fields or sensitive information).


replaceAll

Description: Replace all regex matches in a string.

Example:

jexl:a.replaceAll('.*?_(.*)', '$1')

When to use: Use when you need to normalize values (e.g., remove prefixes/suffixes from IDs).


replaceFirst

Description: Replace only the first regex match in a string.

Example:

jexl:a.replaceFirst('.*?_(.*)', '$1')

When to use: Use when only the first occurrence should be modified (e.g., strip a single prefix from a code).


mapValueByPrefix

Description: Map values that start with a given prefix (taken from a query parameter).

Example:

jexl:a.mapValueByPrefix('stockStatus', 'marketId')

When to use: Use when values should depend on runtime parameters (e.g., mapping stock status per market).


Chaining Functions

Description: Combine multiple transformations in sequence.

Example:

jexl:a.replace('${sku} - ${supplierId}').replace('${sku}')

When to use: Use when one transformation depends on another (e.g., format a field, then clean it with regex).


Advanced Transformations

scaleToPercentage

Description: Scale a numeric score field into a percentage (0–100).

Example:

jexl:a.scaleToPercentage('score', 0.0, 10.0)

When to use: Use when you need normalized scoring (e.g., showing scores as percentages in results).


mapScoreToColor

Description: Map numeric scores to traffic-light colors.

Example:

jexl:a.mapScoreToColor('score', 0.3, 0.7)

When to use: Use when scores should be categorized visually (e.g., red/yellow/green indicators).


Best Practices

  • ✅ Use firstField for fallback chains of possible fields.
  • ✅ Use concat for multi-value attributes (tags, categories, etc.).
  • ⚠️ Test regex replacements carefully to avoid unexpected results.
  • 🔗 Functions can be chained for complex mappings.