es-文檔版本號,操作類型,分片選擇
阿新 • • 發佈:2018-08-02
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-文檔版本號,操作類型,分片選擇