You're viewing version 2.19 of the OpenSearch documentation. For the latest version, see the current documentation. For information about OpenSearch version maintenance, see Release Schedule and Maintenance Policy.
Normalizer
The normalizer
mapping parameter defines a custom normalization process for keyword fields. Unlike analyzers for text fields, which generate multiple tokens, normalizers transform the entire field value into a single token using a set of token filters. When you define a normalizer, the keyword field is processed by the specified filters before it is stored while keeping the _source
of the document unchanged.
Defining a normalizer
The following request creates an index named products
with a custom normalizer called my_normalizer
. The normalizer is applied to the code
field, which uses the trim
and lowercase
filters:
PUT /products
{
"settings": {
"analysis": {
"normalizer": {
"my_normalizer": {
"type": "custom",
"filter": ["trim", "lowercase"]
}
}
}
},
"mappings": {
"properties": {
"code": {
"type": "keyword",
"normalizer": "my_normalizer"
}
}
}
}
When you ingest a document into the index, the code
field is normalized by trimming any extra spaces and converting the text to lowercase:
PUT /products/_doc/1
{
"code": " ABC-123 EXTRA "
}
Search for the indexed document using lowercase and trimmed text in the query:
POST /products/_search
{
"query": {
"term": {
"code": "abc-123 extra"
}
}
}
Because the code
field is normalized, the term
query successfully matches the stored document:
{
...
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "products",
"_id": "1",
"_score": 0.2876821,
"_source": {
"code": " ABC-123 EXTRA "
}
}
]
}
}