Response Customization features
Response customization features determine how results are returned by the search engine. Empathy Platform offers these response customization features:
- Sorting: Sorts the results by a given field.
- Pagination: Paginates through a set of results.
- Grouping: Groups the results by a given field.
- Total Hits: Renders the total number of results matching the query.
- Search Hits: Determines the fields to be returned in the response.
interact
For an explanation on how to set up the features in the Search microservice, see Feature configuration.
Sorting
The Sorting (sorting
) response customization feature lets you
sort the returned results by a specific
field.
Sorting can be determined using:
The order of preference is query parameters first, and then Search configuration file. The sorting values are set up in the Search configuration file.
Query parameters
You use the sort
query parameter to pass the sorting criteria (field
) by which results are
sorted in the SERP. To pass the sorting criteria in the request, use the format sort=field order
or sort=field
.
warning
Despite sending sorting criteria via query parameter in the request, all sortable fields must be
listed in the Search configuration (whitelist
). Otherwise, an error is
returned.
Note that sortable fields must not be text
type in the index.
If you want to send multiple sorting criteria, you need to indicate multiple values separated by
comma, e.g. sort=field order,field2 order
.
If the request does not include any sorting criteria, the default criteria in the configuration is used.
Field | Description | Type |
---|---|---|
sort | Sorting criteria to display results on the SERP. Available formats: sort=field order or sort=field . | String |
order | Criteria used to order the results. Possible values: ASC to sort results in ascending order or DESC to sort results in descending order | String enum |
Search configuration
Sorting criteria (fields
) can be defined in the JSON configuration file. If no default sorting
criteria is included in the configuration file, the result set is sorted by descending score.
You use the whitelist
parameter to set fields as sortable. Otherwise, 400 Bad Request error code
is returned.
Config parameters
Field | Description | Type | Default value |
---|---|---|---|
whitelist | List of allowed fields to sort the results by. Text type fields in index mappings cannot be configured as sortable. | Array | Empty list |
fields | List of fields to be used for sorting. Used as the default option when no sorting options are included in the request | Array | Empty list |
defaultOrder | Default order criteria to use when no order is included in the request. Possible values: ASC to sort results in ascending order or DESC to sort results in descending order | String enum | ASC |
Fields parameters
Field | Description | Type | Default value |
---|---|---|---|
field | Field to be used to sort the results | --- | |
order | Criteria used to order the results. Possible values: ASC to sort results in ascending order or DESC to sort results in descending order | Enum string | --- |
Configuration example
{
"name": "sorting",
"config": {
"whitelist": ["brand", "size", "price"],
"fields": [
{
"field": "price",
"order": "ASC"
}
],
"defaultOrder": "DESC"
}
}
Pagination
The Pagination (pagination
) response customization feature lets you
paginate the results returned in the
response by splitting them into subsets (pages) of results to improve loading performance when
displaying results. You can choose to display a specific number of results (rows
) per subset.
Pagination can be determined using:
The order of preference is query parameters first, and then Search configuration file. The pagination values are set up in the Search configuration.
Query parameters
The start
query parameter in the request is used to send the pagination options, determining how
results are grouped into subsets. To pass pagination options, use the format start=n&rows=m
.
If no pagination parameters are sent in the request, the default pagination options in the configuration are used.
Field | Description | Type |
---|---|---|
start | Determines the starting result. The value can range from 0 to 1000 | Integer |
rows | Determines the number of results returned for each subset. The value should be greater than 0 | Integer |
Search configuration
In the JSON configuration file, you can limit the size for the result subset (rowsLimit
), i.e. the
number of rows (rows
) per page to be displayed in the SERP.
If there is no pagination set up in the configuration file, the results are grouped using default values.
Config parameters
Field | Description | Type | Default value |
---|---|---|---|
start | Position in the result set of the first element returned. Minimum value: 0 . Maximum value: 1000 | Integer | 0 |
rows | Number of elements returned | Integer | 10 |
rowsLimit | Size limit for each subset | Integer | 500 |
Configuration example
{
"name": "pagination",
"config": {
"start": 0,
"rows": 20,
"rowsLimit": 500
}
}
Grouping
The Grouping (grouping
) response customization feature lets you group the result set by a
field set in the configuration.
Important
The Total hits feature depends on grouping. For more information, see Total hits.
Grouping can be determined using:
The order of preference is query parameters first, and then Search configuration file. The fields to group the results by are set up in the Search configuration file.
Query parameters
You can send the groupEnabled
parameter in the request to enable the grouping feature. When
grouping is enabled, the results are automatically grouped by the field indicated in the Search
configuration. The best matching results for each group are returned in the search engine response.
If the request does not include the groupEnabled
parameter, the value set up in the configuration
file is used.
Field | Description | Type |
---|---|---|
groupEnabled | Determines if grouping is enabled or not. If true , the result set can be grouped (optional) | Boolean |
Search configuration
In the JSON configuration file, you determine the field to group the results by. If there is no field set up in the configuration, an error is returned in the response when grouping is enabled.
Config parameters
Field | Description | Type | Default value |
---|---|---|---|
enable | Determines if grouping should be enabled by default for every search request or only when requested by query parameter. Possible values: true or false (required) | Boolean | --- |
field | Field to group the result set by (required) | String | --- |
Configuration example
{
"name": "grouping",
"config": {
"enabled": true,
"field": "brand"
}
}
Total Hits
The Total Hits (totalHits
) response customization feature lets you include the total number of
results in the search engine response.
Using Total Hits with Filtering and Grouping When Total Hits is used with the
Filtering and Grouping features, these features should be executed first before Total Hits so that cardinality of the result set can be correctly calculated. :::
When the Total Hits feature is configured, the number of results found that match the query is
indicated in the numFound
property in the response.
If you use Grouping, the numFound
response property represents the result of
calculating the number of the different result groups. For performance reasons, the exact number of
results is returned when the number of groups is lower than 3,000. If the number of groups is over
3,000, a slight deviation from the actual total number can be rendered.
Search configuration
You can enable or disable (disableTracking
) the Total hits feature in the configuration file.
Config parameters
Field | Description | Type | Default value |
---|---|---|---|
disableTracking | Determines if Total Hits is disabled or not. If true , the number of results found is not displayed on the SERP (optional) | Boolean | false |
Configuration example
{
"name": "totalHits",
"config": {
"disableTracking": false
}
}
{
"field" : "price_{store}"
}
coding tip
Curly brackets {}
are special characters. Do not use these brackets in the field name or the
parameter value. Escaping is not supported.
You cannot use placeholders in values passed as query parameters. For example, if you send
returnableFields=field_{store}&store=X
as query parameters in the request, it won't return any
field. What's more, if the query parameter contains multiple values (either param=X¶m=Y
or
param=X,Y
), only the first one is used.
Important
If the query parameter is not included in the request, the placeholder won't be replaced. If you want to force a parameter in the request, use Mandatory Parameters.
Config parameters
Field | Description | Type | Default value |
---|---|---|---|
origin | The origin where the system searches for the fields to be returned. Available values: SOURCE and STORE (case-sensitive) | String | SOURCE |
returnableFields | The list of stored fields to be returned | Array | --- |
Returnable Fields parameters
Field | Description | Type | Default value |
---|---|---|---|
field | Name of the field to return (required) | String | --- |
mandatory | Indicates if the field is always returned. If true , the field is required. If false , the field can be omitted by query parameter (optional) | Boolean | false |
Configuration example
{
"name": "searchHits",
"config": {
"origin": "SOURCE",
"returnableFields": [
{
"field": "price",
"mandatory": true
},
{
"field": "material",
"mandatory": false
},
{
"field": "category"
}
]
}
}