Home > other >  Default Normalizer of elasticsearch that can be applied to all keyword fileds without explicitly map
Default Normalizer of elasticsearch that can be applied to all keyword fileds without explicitly map

Time:12-29

I have created a custom normalizer and custom analyzer with the name 'default' as part of my index template. I can see default analyzer is getting applied to all the fields automatically but the normalizer is not.

Is there any other way that i can achieve this default normalizer getting applied to all the fields ?

My end goal is to search over a field of type keyword in a case insensitive manner using the normalizer

PS: My custom analyzer with name default makes all the fields as keyword.

My settings:

        settings : {
           "index" : {
            "analysis" :{
              "normalizer": {
                "default" : {
                 "type": "custom", 
                 "char_filter":[], 
                 "filter" : ["lowercase"]
             }
    }, 
    
    "analyzer":{
     "default":
     {
    "type":"keyword"
     }
    }
   }
  }
}

CodePudding user response:

It would be much easier to leverage dynamic templates to achieve what you want. Simply create your mapping as follows:

PUT my-index
{
  "settings": {
     ...
  },
  "mappings": {
    "dynamic_templates": [
      {
        "strings": {
          "match_mapping_type": "string",
          "mapping": {
            "type": "keyword",
            "ignore_above": 256,
            "normalizer": "default"
          }
        }
      }
    ]
  }
}

That way, every field that is a string will be mapped as a keyword that uses the default normalizer (it doesn't have to be named that way, though)

  • Related