Elasticsearch索引mapping的寫入、查看與修改

來源:互聯網
上載者:User

標籤:com   分詞   htm   err   tar   Lucene   mat   nap   lan   

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}

上面的操作中,我們給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修改過程,可以參考.

轉自:http://blog.csdn.net/napoay/article/details/52012249

(轉)Elasticsearch索引mapping的寫入、查看與修改

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.