• ES mapping的写入与查看


    Elasticsearch索引mapping的写入、查看与修改

    https://blog.csdn.net/napoay/article/details/52012249

    首先创建一个索引:

    curl -XPOST "http://127.0.0.1:9200/productindex"
    {"acknowledged":true}
    1
    2
    现在只创建了一个索引,并没有设置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机制的。
    这里有一篇关于修改mapping字段的博客,叙述的比较清楚:Elasticsearch 的坑爹事——记录一次mapping field修改过程,可以参考.

  • 相关阅读:
    A+B Problem
    迭代平方根
    猴子报数
    分数求和
    猴子吃桃
    钻石
    杨辉三角形
    MYSQL 5.7 修改密码、登录问题
    SQL 语句 explain 分析
    重构CMDB,避免运维之耻
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/9037551.html
Copyright © 2020-2023  润新知