Elasticsearch dynamic mapping 动态模板 Default mapping 默认列

参考官方文档:

Dynamic field mappingedit

Default mapping

Custom dynamic mapping

问题

我们有一个标签,所以这个标签会有很多,而且都是用户自己的标签,会有各种各样的内容。如果使用动态映射列,第一次可能就是数字类型,而后进来其它的字符就全是无法转换的错误。

解决

elasticsearch提供了一个默认的配置可以设置动态映射列的格式。
简单来说,就是匹配新加入的列的名称,如果匹配成功,则使用设置好的类型。

json格式

PUT /my_index
{
    "mappings": {
        "my_type": {
            "dynamic_templates": [
                { "es": {
                      "match":              "*_es", 
                      "match_mapping_type": "string",
                      "mapping": { "type": "string", "analyzer": "spanish" } }},
                { "en": {
                      "match":              "*", 
                      "match_mapping_type": "string",
                      "mapping": { "type": "string", "analyzer": "english" } }}
            ]
}}}
PUT _template/logging
{
  "template":   "logs-*", 
  "settings": { "number_of_shards": 1 }, 
  "mappings": {
    "_default_": {
      "_all": { 
        "enabled": false
      },
      "dynamic_templates": [
        {
          "strings": { 
            "match_mapping_type": "string",
            "mapping": { "type": "string", "fields": { "raw": { "type": "string", "index": "not_analyzed", "ignore_above": 256 } } } }
        }
      ]
    }
  }
}

PUT logs-2015.10.01/event/1
{ "message": "error:16" }

以上两段内容来自官方文档。
这里的字段名称已经非常明白了,我就不讲解了。

java格式

XContentBuilder builder = XContentFactory.jsonBuilder()
                    .startObject()
                    .startObject(typeName)

                    .startArray("dynamic_templates")
                    .startObject()
                    .startObject("all_tag_string")
                    .field("match", "tag_*")
//                    .field("match_mapping_type","string")
                    .field("match_mapping_type", "*")
                    .startObject("mapping")
                    .field("type", "string")
                    .endObject()
                    .endObject()
                    .endObject()
                    .endArray()


                    .field("dynamic_date_formats", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd")
                    .startObject("properties")
                    .startObject("customer_list")
                    .field("type", "nested")
                    .endObject()
                    .startObject("goods_list")
                    .field("type", "nested")
                    .endObject()
                    .endObject()
                    .endObject().endObject();

这段代码的意思是,设置默认的时间格式为我们常用的格式,设置了两种。另外所有列名以 tag_ 开头的都设置为string类型

//es提供的一些查询方法
IndicesExistsResponse//判断index是否存在
TypesExistsResponse//判断type是否存在
DeleteMappingRequest//删除mapping,可删除index,type
PutMappingRequest//创建mapping,可以使用XContentBuilder参数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值