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 "
}
}
]
}
}