elasticsearch - 将常量映射定义添加到映射中的特定类型

时间:2015-09-07 20:50:21

标签: templates elasticsearch mapping

我有一个包含许多实体的静态映射json。 例如

{
    "settings": {},
    "mappings": {
        "MyEntity": {
            "properties": {
                "date": {
                    "type": "date",
                    "format": "dateOptionalTime"
                },
                "name": {
                    "type": "string",
                },
                "tweet": {
                    "type": "string"
                },
                "user_id": {
                    "type": "long"
                }
            }
        }
    }
}

“MyEntity”是许多实体之一的例子 我想要的是每次实体都有价值:

"name": { 
      "type": "string",
 },

这将被添加:

"name": {
    "type": "string",
    "analyzer": "mm_name_analyzer",
    "fields": {
        "lc": {
            "type": "string",
            "analyzer": "case_insensitive_sort"
        },
        "raw": {
            "type": "string",
            "index": "not_analyzed"
        }
    }
}

我不想将它添加到定义为字符串的每个实体字段。

有办法吗?

1 个答案:

答案 0 :(得分:-1)

这里将indexName替换为您的目的索引或给出索引名称模式

您可以将映射应用于" __ default _"这将确保映射应用于动态映射应用于的独立下的所有类型。

curl -XPUT localhost:9200/_template/nameTemplate -d '{
  "template": "indexName",
  "mappings": {
    "_default_": {
      "dynamic_templates": [
        {
          "name_field": {
            "match": "name",
            "match_mapping_type": "string",
            "mapping": {
              "type": "string",
              "analyzer": "mm_name_analyzer",
              "fields": {
                "lc": {
                  "type": "string",
                  "analyzer": "case_insensitive_sort"
                },
                "raw": {
                  "type": "string",
                  "index": "not_analyzed"
                }
              }
            }
          }
        }
      ]
    }
  }
}'