1. 程式人生 > >es-文檔版本號,操作類型,分片選擇

es-文檔版本號,操作類型,分片選擇

engine 樂觀 事務 cep fail use type sql 處理

一、版本號:

在es中每個文檔都有一個版本號,默認情況下,版本號都是隨著每次對該文檔的修改或者刪除自增的,當然你也可以自己指定。有了這個文檔號,我們可以像mysql

樂觀鎖一樣,用來進行控制字我們文檔的更新,如果要更新的文檔號與索引中的文檔號不一致,那麽es會拒絕該次操作。常用於事務的處理中。

url:PUT http://127.0.0.1:9200/myes/name/6?version=17&pretty/

參數:

{
  "name":"zzq",
   "age":17
}

結果:

成功的結果

{
"_index": "myes",
"_type": "name",
"_id": "6",
"_version": 18,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": false
}

 

失敗的結果:

{
"error": {
"root_cause": [
{
"type": "version_conflict_engine_exception",
"reason": "[name][6]: version conflict, current [18], provided [17]",
"shard": "2",
"index": "myes"
}
],
"type": "version_conflict_engine_exception",
"reason": "[name][6]: version conflict, current [18], provided [17]",
"shard": "2",
"index": "myes"
},
"status": 409
}

  

二:操作類型

系統支持通過 op_type=create命令執行創建操作,只有不存在此文檔的時候才會創建。如果不指定類型,那麽存在此文檔就會更新。

url:PUT http://127.0.0.1:9200/myes/name/8?op_type=create&pretty/

參數:

{
  "name":"zzq5",
   "age":17
}

 

結果:

{
"_index": "myes",
"_type": "name",
"_id": "8",
"_version": 1,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}

  再次執行上述的鏈接,結果如下:

{
"error": {
"root_cause": [
{
"type": "document_already_exists_exception",
"reason": "[name][8]: document already exists",
"shard": "1",
"index": "myes"
}
],
"type": "document_already_exists_exception",
"reason": "[name][8]: document already exists",
"shard": "1",
"index": "myes"
},
"status": 409
}

  

 三、分片選擇

默認情況下,分片的選擇是通過ID的散列值進行控制的。這個只能通過 router參數進行手動控制(通過hash的值)

url:PUT http://127.0.0.1:9200/myes/name/?router=myes&pretty/

es-文檔版本號,操作類型,分片選擇