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.