Disabling field analyzing by default in elastic search

后端 未结 3 2091
夕颜
夕颜 2020-12-13 10:17

Is it possible to enable indexing of elastic search fields selectively for a type?

Through the mapping settings for a specific index, one can set the property

3条回答
  •  醉话见心
    2020-12-13 10:56

    From elasticsearch 5.x string type is disabled. Instead elasticsearch has introduced two types text and keyword. Read this blog for the reasons for migrating data https://www.elastic.co/blog/strings-are-dead-long-live-strings

    So instead of adding a template to disable analyzer, you could simply use field.keyword for exact search. e.g. If field name is fullName, and you have entries

    1. fullName:"John Doe"
    2. fullName:"John"

    then, fullName:"John" will return two results, while fullName.keyword:"John" will return single record.

    Just in case, you still want to disable text field, you can use the below dynamic template,

    PUT _template/disable_all_analyzer
       {
         "template": "*",
         "mappings": {
           "_default_": {
               "dynamic_templates": [
                   { "notanalyzed": {
                         "match":              "*", 
                         "match_mapping_type": "string",
                         "mapping": {
                             "type":        "keyword"
                         }
                      }
                   }
                 ]
              }
          }
       }
    

    Cheers!!!

提交回复
热议问题