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

来源:互联网 发布:批量图片透明度软件 编辑:程序博客网 时间:2024/05/21 06:11
原文地址:http://blog.csdn.net/napoay/article/details/52012249

mapping的写入与查看

首先创建一个索引:

curl -XPUT "http://127.0.0.1:9200/productindex"{"acknowledged":true}  
  • 1
  • 2
  • 1
  • 2

现在只创建了一个索引,并没有设置mapping,查看一下索引mapping的内容:

curl -XGET "http://127.0.0.1:9200/productindex/_mapping?pretty" {  "productindex" : {    "mappings" : { }  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可以看到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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

上面的操作中,我们给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"          }        }      }    }  }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

修改mapping

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

curl -XPOST "http://127.0.0.1:9200/productindex/product/_mapping?pretty" -d '{     "product": {                "properties": {                     "amount":{                        "type":"integer"                   }                }            }    }'{  "acknowledged" : true}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

新增成功。 
如果要修改一个字段的类型呢,比如onSale字段的类型为boolean,现在想要修改为string类型,尝试一下:

 curl -XPOST "http://127.0.0.1:9200/productindex/product/_mapping?pretty" -d '{     "product": {                "properties": {                 "onSale":{                    "type":"string"                }            }        }}'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

返回错误:

{  "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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

为什么不能修改一个字段的type?原因是一个字段的类型修改以后,那么该字段的所有数据都需要重新索引。Elasticsearch底层使用的是lucene库,字段类型修改以后索引和搜索要涉及分词方式等操作,不允许修改类型在我看来是符合lucene机制的。