在弹性搜索中映射多个字段

时间:2017-05-10 13:57:39

标签: elasticsearch amazon-emr

我想将以下模板应用于所有字段。 目前,我仅将此映射应用于“名称”字段。

假设我还有更多字段,例如:“resedential_address”,“work_address”,“birth_place”,“DOB”等。

我怎样才能以有效的方式做到这一点。我知道我可以为所有字段重复相同的块。 或者有哪种方法可以将以下模板应用于所有“文本”字段?

{
      "template": "*",
      "settings": {
      "analysis": {
      "filter": {
                "ngram_filter": {
                    "type": "ngram",
                    "min_gram": 1,
                    "max_gram": 25
                }
            },
         "analyzer": {
            "case_insensitive": {
               "tokenizer": "whitespace",
               "filter": [
                  "ngram_filter","lowercase"
               ]    
            },
            "search_analyzer":{
                    "type": "custom",
                    "tokenizer": "whitespace",
                    "filter": "lowercase"
                }
         }
      }
   },
   "mappings": {
      "my_type": {
         "properties": {
            "name": {
               "type": "string",
               "analyzer": "case_insensitive",
               "search_analyzer": "search_analyzer"
            }
         }
      }
   }
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果您要使用提供的自定义映射映射所有text字段,请使用dynamic templates功能,如下所示:

{
      "template": "*",
      "settings": {
      "analysis": {
      "filter": {
                "ngram_filter": {
                    "type": "ngram",
                    "min_gram": 1,
                    "max_gram": 25
                }
            },
         "analyzer": {
            "case_insensitive": {
               "tokenizer": "whitespace",
               "filter": [
                  "ngram_filter","lowercase"
               ]    
            },
            "search_analyzer":{
                    "type": "custom",
                    "tokenizer": "whitespace",
                    "filter": "lowercase"
                }
         }
      }
   },
   "mappings": {
      "my_type": {
         "dynamic_templates": [
        {
          "strings": {
            "match_mapping_type": "string",
            "mapping": {
              "type": "string",
               "analyzer": "case_insensitive",
               "search_analyzer": "search_analyzer"
            }
          }
        }
      ]
      }
   }
}

上面的模板将为所有字符串字段创建相同的自定义映射,例如name, residential_address, work_address ...