GET 192.168.56.10:9200/_cat/nodes:查看所有节点
GET 192.168.56.10:9200/_cat/health:查看es健康状况
GET 192.168.56.10:9200/_cat/master:查看主节点信息
GET 192.168.56.10:9200/_cat/indices:查看所有索引show databases;
1.解释CAS(compare and swap):
比较交换是一个原子操作,获取seq_no值与预期seq_no值比较是否相等,
1)相等则更新数据
2)不相等则更新失败,需要重新获取seq_no作为预期值然后做CAS操作
2.实现,以下demo使用PUT操作
1)先查询seq_no作为预期值:192.168.56.10:9200/customer/external/1
返回值:
{"_index":"customer","_type":"external","_id":"1","_version":3,"_seq_no":2,"_primary_term":1,"found":true,"_source":{"name":"John Doe"}}2)带上预期值执行两次CAS操作,只有一个会成功
当执行第一次时seq_no值被改变,第二次进来预期值与真实seq_no不相等,更新失败
------------------------------------------------------------------
执行第一次
192.168.56.10:9200/customer/external/1?if_seq_no=2&if_primary_term=1{"name":"John Doe2"}
修改成功,返回:
{"_index":"customer","_type":"external","_id":"1","_version":4,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":3,// 值已更新"_primary_term":1}------------------------------------------------------------------
执行第二次,seq_no预期值仍然是2,与实际值seq_no=3不相等,CAS失败
192.168.56.10:9200/customer/external/1?if_seq_no=2&if_primary_term=1{"name":"John Doe3"}
修改失败返回409{"error":{"root_cause":[{"type":"version_conflict_engine_exception","reason":"[1]: version conflict, required seqNo [2], primary term [1]. current document has seqNo [3] and primary term [1]","index_uuid":"X0p28Y5FQvy344rl9EXhrg","shard":"0","index":"customer"}],"type":"version_conflict_engine_exception","reason":"[1]: version conflict, required seqNo [2], primary term [1]. current document has seqNo [3] and primary term [1]","index_uuid":"X0p28Y5FQvy344rl9EXhrg","shard":"0","index":"customer"},"status":409}
例2:在请求url上不指定索引、类型
POST _bulk
{"delete":{"_index":"website","_type":"blog","_id":"123"}}//删除文档{"create":{"_index":"website","_type":"blog","_id":"123"}}//新建文档{"title":"My first blog post"}{"index":{"_index":"website","_type":"blog"}}//创建/更新文档{"title":"My second blog post"}{"update":{"_index":"website","_type":"blog","_id":"123","_retry_on_conflict":3}}//更新文档{"doc":{"title":"My updated blog post"}}