360SDN.COM

Elasticsearch索引mappings的写入修改字段类型、新增mappings字段(新增最新6.*的操作

来源:  2018-08-29 17:17:32    评论:0点击:

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

mapping的写入与查看

首先创建一个索引:


curl -XPOST "http://127.0.0.1:9200/productindex"
{"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
}

Elasticsearch 6.* 版本在windows下只能先把mappings保存到json文件中才可以,同时需要添加 -H "Content-Type: application/json"才可以,完整命令如下:


curl -H "Content-Type: application/json" -XPUT http://127.0.0.1:9200/productindex/product/_mapping?pretty -d @product.json

product.json文件中内容:

{
    "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"
                }
            }
        }
  }
  

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

curl -XPOST "http://127.0.0.1:9200/productindex/product/_mapping?pretty" -d '{
     "product": {
                "properties": {
                     "amount":{
                        "type":"integer"
                   }
                }
            }
    }'
{
  "acknowledged" : true
}

修改mapping

如果想给product新增一个字段,那么需要修改mapping,尝试一下:


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

新增成功。

Elasticsearch 6.* 版本新增mappings,在windows下只能先把mappings保存到json文件中才可以,同时需要添加 -H "Content-Type: application/json"才可以,完整命令如下:

 
curl  -H "Content-Type: application/json"  -XPOST http://127.0.0.1:9200/productindex/product/_mapping?pretty -d @product_update.json

product_update.json文件中内容:

{
     "product": {
                "properties": {
                     "amount":{
                        "type":"integer"
                   }
                }
            }
    }
  

如果要修改一个字段的类型呢,比如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修改过程,可以参考.

为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权