文檔經過index
API被索引——使數據能夠被存儲和搜索。可是首先咱們須要決定文檔所在。正如咱們討論的,文檔經過其_index
、_type
、_id
惟一肯定。們能夠本身提供一個_id
,或者也使用index
API 爲咱們生成一個。web
若是你的文檔有天然的標識符(例如user_account
字段或者其餘值表示文檔),你就能夠提供本身的_id
,使用這種形式的index
API:ide
PUT /{index}/{type}/{id} { "field": "value", ... }
例如咱們的索引叫作「website」
,類型叫作「blog」
,咱們選擇的ID是「123」
,那麼這個索引請求就像這樣:ui
PUT /website/blog/123 { "title": "My first blog entry", "text": "Just trying this out...", "date": "2014/01/01" }
Elasticsearch的響應:this
{ "_index": "website", "_type": "blog", "_id": "123", "_version": 1, "created": true }
響應指出請求的索引已經被成功建立,這個索引中包含_index
、_type
和_id
元數據,以及一個新元素:_version
。spa
Elasticsearch中每一個文檔都有版本號,每當文檔變化(包括刪除)都會使_version
增長。在《版本控制》章節中咱們將探討如何使用_version
號確保你程序的一部分不會覆蓋掉另外一部分所作的更改。版本控制
若是咱們的數據沒有天然ID,咱們可讓Elasticsearch自動爲咱們生成。請求結構發生了變化:PUT
方法——「在這個URL中存儲文檔」
變成了POST
方法——"在這個類型下存儲文檔"
。(譯者注:原來是把文檔存儲到某個ID對應的空間,如今是把這個文檔添加到某個_type
下)。code
URL如今只包含_index
和_type
兩個字段:blog
POST /website/blog/ { "title": "My second blog entry", "text": "Still trying this out...", "date": "2014/01/01" }
響應內容與剛纔相似,只有_id
字段變成了自動生成的值:索引
{ "_index": "website", "_type": "blog", "_id": "wM0OSFhDQXGZAWDf0-drSA", "_version": 1, "created": true }
自動生成的ID有22個字符長,URL-safe, Base64-encoded string universally unique identifiers, 或者叫 UUIDs。ip