Skip to main content

Search Config

The search config defines the behavior of a search app. It is configured per search app in the admin and contains settings for results, facets, sorting, spellcheck, validation, and more.

Validation

The validation section configures request validation rules that are evaluated by the QscSearchRequestValidationFilter in the search pipeline. These rules are merged with any rules defined in the pipeline YAML.

{
"validation": {
"rules": [
"q: required, minLength=1, maxLength=500",
"page: min=0, max=100, default=1",
"rows: min=0, max=100, default=10",
"parameter.customerId: required, type=integer"
]
}
}

Rule Syntax

Each rule is a string with the format:

target: constraint1, constraint2, ...
CategoryFormatDescription
FieldfieldName: constraintsValidates a standard search query field (q, locale, page, rows, requestId, userId, sessionId, requestOrigin)
Parameterparameter.name: constraintsValidates a parameter from the parameters map
Filterfilter.id: constraintsValidates a search filter from the filter list

Available Constraints

Fields:

ConstraintDescriptionExample
requiredMust be non-null and non-blankq: required
valuesMust be one of the listed values (separated by |)locale: values=de|en|fr
minLengthMinimum string lengthq: minLength=1
maxLengthMaximum string lengthq: maxLength=500
minMinimum numeric valuepage: min=0
maxMaximum numeric valuepage: max=100
defaultDefault value if nullpage: default=1

Parameters:

ConstraintDescriptionExample
requiredMust be presentparameter.customerId: required
valuesMust be one of the listed values (separated by |)parameter.sort: values=relevance|price|name
typeData type: string, integer, long, double, booleanparameter.limit: type=integer
type (array)Append [] to require an array; each element is type-checkedparameter.ids: type=integer[]
patternRegex match (applied per element for arrays)parameter.email: pattern=^[\w@.]+$
defaultDefault value if missingparameter.sort: default=relevance

Filters:

ConstraintDescriptionExample
requiredMust be presentfilter.category: required
valuesEvery filter value must be one of the listed values (separated by |)filter.color: values=red|green|blue
typeExpected filter typefilter.category: type=term
dataTypeExpected data typefilter.price: dataType=number
defaultCreates filter with this value if missingfilter.status: default=active
defaultTypeDefault filter type if nullfilter.price: defaultType=range
defaultDataTypeDefault data type if nullfilter.price: defaultDataType=number
defaultOperatorDefault operator if nullfilter.category: defaultOperator=and

Options (on any rule):

OptionDescriptionExample
statusCodeHTTP status code (default: 400)statusCode=422
messageCustom error message (must be last)message=Custom error text

Pipeline vs Search Config Rules

Rules can be defined in both places:

SourceScopeUse case
Pipeline YAMLAll search appsShared base rules (e.g. required fields, paging limits)
Search configPer search appApp-specific rules (e.g. required parameters, custom limits)

Pipeline rules run first, then search config rules. Both use the same string syntax.

Example

Pipeline YAML (shared):

rules:
- "locale: required, values=de|en|fr"
- "q: required"
- "page: min=0, default=1"
- "rows: min=0, default=10"

Search config (per app):

{
"validation": {
"rules": [
"q: minLength=3, message=Please enter at least 3 characters",
"rows: max=50",
"parameter.customerId: required, type=integer",
"parameter.sort: values=relevance|price|name, default=relevance",
"parameter.ids: type=integer[]",
"filter.color: values=red|green|blue"
]
}
}

For the full documentation of the validation filter, see QscSearchRequestValidationFilter.