根据通配符

时间:2017-04-05 18:47:38

标签: elasticsearch

我的索引中有很多字段,字段名称以_count结尾(例如page_countorder_count等),我一直希望这些字段为long。我尝试创建我认为是默认映射的内容如下:

{
  "mappings": {
    "_default_": {
      "_all": {
        "enabled": false,
        "norms": {
          "enabled": false
        }
      },
      "properties": {
        "*_count": {
          "type": "long"
        }
      }
    }
  },
  "settings": {
    "index.query.default_field": "message",
    "number_of_replicas": 2,
    "number_of_shards": 3
  },
  "template": "core-app-*"
}

然而,这似乎不起作用,因为我现在在我最近的索引中有字符串字段:

"page_count":{  
  "type":"text",
  "fields":{  
     "keyword":{  
        "type":"keyword",
        "ignore_above":256
     }
  }
}

这是基于通配符创建映射的正确方法吗?我假设不是因为它似乎不起作用......:)

1 个答案:

答案 0 :(得分:0)

您可以使用elasticsearch中的dynamic templates功能来实现它。

PUT _template/core-app-template
{
  "template": "core-app-*",
  "settings": {
    "index.query.default_field": "message",
    "number_of_replicas": 2,
    "number_of_shards": 3
  },
  "mappings": {
    "_default_": {
      "_all": {
        "enabled": false,
      "norms": {
        "enabled": false
      }
    }
    },
    "my_type": {
      "dynamic_templates": [
        {
          "_count_as_long": {
            "match_mapping_type": "*",
            "match": "*_count",
            "mapping": {
              "type": "long"
            }
          }
        }
      ]
    }
  }
}

注意:在上面的示例中注意index_type我自由地将其定义为my_type,因此当您创建此index template时,请使用您的实际index_type 1}}代替my_type