• ES 创建mapping


    mapping的写入与查看
    首先创建一个索引:

    curl -XPUT "http://erp2.es.kd1.pagoda.com.cn:80/erp_stock_index"
    {"acknowledged":true}
    现在只创建了一个索引,并没有设置mapping,查看一下索引mapping的内容:

    curl -XGET "http://127.0.0.1:9200/productindex/_mapping?pretty"
    {
    "productindex" : {
    "mappings" : { }
    }
    }
    可以看到mapping为空,我们只创建了一个索引,并没有进行mapping配置,mapping自然为空。
    下面给productindex这个索引加一个type,type name为product,并设置mapping:

    curl -XPOST "http://127.0.0.1:9200/productindex/product/_mapping?pretty" -d '
    {
    "product": {
    "properties": {
    "title": {
    "type": "string",
    "store": "yes"
    },
    "description": {
    "type": "string",
    "index": "not_analyzed"
    },
    "price": {
    "type": "double"
    },
    "onSale": {
    "type": "boolean"
    },
    "type": {
    "type": "integer"
    },
    "createDate": {
    "type": "date"
    }
    }
    }
    }
    '

    {
    "acknowledged" : true
    }
    上面的操作中,我们给productindex加了一个type,并写入了product的mapping信息,再次查看:

    curl -XGET "http://127.0.0.1:9200/productindex/_mapping?pretty"
    {
    "productindex" : {
    "mappings" : {
    "product" : {
    "properties" : {
    "createDate" : {
    "type" : "date",
    "format" : "strict_date_optional_time||epoch_millis"
    },
    "description" : {
    "type" : "string",
    "index" : "not_analyzed"
    },
    "onSale" : {
    "type" : "boolean"
    },
    "price" : {
    "type" : "double"
    },
    "title" : {
    "type" : "string",
    "store" : true
    },
    "type" : {
    "type" : "integer"
    }
    }
    }
    }
    }
    }
    修改mapping
    如果想给product新增一个字段,那么需要修改mapping,尝试一下:

    curl -XPOST "http://127.0.0.1:9200/productindex/product/_mapping?pretty" -d '{
    "product": {
    "properties": {
    "amount":{
    "type":"integer"
    }
    }
    }
    }'
    {
    "acknowledged" : true
    }
    新增成功。
    如果要修改一个字段的类型呢,比如onSale字段的类型为boolean,现在想要修改为string类型,尝试一下:

    curl -XPOST "http://127.0.0.1:9200/productindex/product/_mapping?pretty" -d '{
    "product": {
    "properties": {
    "onSale":{
    "type":"string"
    }
    }
    }
    }'
    返回错误:

    {
    "error" : {
    "root_cause" : [ {
    "type" : "illegal_argument_exception",
    "reason" : "mapper [onSale] of different type, current_type [boolean], merged_type [string]"
    } ],
    "type" : "illegal_argument_exception",
    "reason" : "mapper [onSale] of different type, current_type [boolean], merged_type [string]"
    },
    "status" : 400
    }
    为什么不能修改一个字段的type?原因是一个字段的类型修改以后,那么该字段的所有数据都需要重新索引。Elasticsearch底层使用的是lucene库,字段类型修改以后索引和搜索要涉及分词方式等操作,不允许修改类型在我看来是符合lucene机制的。

  • 相关阅读:
    类成员指针
    css图片旋转
    px转化rem
    flexible.js页面布局
    SpringBoot-静态资源映射
    Springboot-日志框架
    Springboot-配置文件
    spring的xml和注解整合
    在mysql中将JSON数组转换为行数据[转]
    php 拼音
  • 原文地址:https://www.cnblogs.com/zeenzhou/p/11510138.html
Copyright © 2020-2023  润新知