这篇文章主要介绍“ElasticSearch基本操作有哪些”,在日常操作中,相信很多人在ElasticSearch基本操作有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ElasticSearch基本操作有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
GET /_cat/nodes: 查看所有节点
GET /_cat/health: 查看健康状况
GET /_cat/master:查看主节点
GET /_cat/indices:查看所有索引 相当于mysql中的showdatabases
PUT customer/external/1;在customer索引(mysql中的数据库)下的external类型(mysql中的表)下保存1号数据(唯一标识)为
PUT customer/external/1
{
"name":"gison"
}
PUT和POST都可以,
POST新增:如果不指定id,会自动生成id。指定id就会修改这个数据,并新增版本号。
PUT可以新增可以修改。PUT必须指定id;由于PUT需要指定id,我们一般用来做修改操作,不指定id会报错。
操作结果:
{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
GET customer/external/1
{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 2,//版本号
"_seq_no" : 1,//并发控制字段,每次更新就会+1,用来做乐观锁
"_primary_term" : 1,//同上,主分片重新分配,如重启,就会变化
"found" : true,
"_source" : {
"name" : "gison"
}
}
(新版本的es乐观锁控制用seq_no,老版本用version)
测试一下乐观锁
模拟两个用户A跟B都想改上面这条数据,A用户查出if_seq_no=1,if_primary_term=1,执行更新
PUT customer/external/1?if_seq_no=1&if_primary_term=1
{
"name":"鸣人"
}
B用户同样也查出if_seq_no=1,if_primary_term=1,随后执行更新
PUT customer/external/1?if_seq_no=1&if_primary_term=1
{
"name":"卡卡西"
}
A用户执行结果
{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 3,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 2,
"_primary_term" : 1
}
B用户执行结果
{
"error": {
"root_cause": [
{
"type": "version_conflict_engine_exception",
"reason": "[1]: version conflict, required seqNo [1], primary term [1]. current document has seqNo [2] and primary term [1]",
"index_uuid": "XbVN6IayQTWbliz3cOOyGw",
"shard": "0",
"index": "customer"
}
],
"type": "version_conflict_engine_exception",
"reason": "[1]: version conflict, required seqNo [1], primary term [1]. current document has seqNo [2] and primary term [1]",
"index_uuid": "XbVN6IayQTWbliz3cOOyGw",
"shard": "0",
"index": "customer"
},
"status": 409
}
post带_update
带_update更新的时候,要加上doc,对比原来数据,与原来一样就不做任何操作
POST customer/external/1/_update
{
"doc": {
"name":"gison"
}
}
返回结果
{
"_index" : "customer",
"_type" : "external",
"_id" : "1",
"_version" : 7,
"result" : "noop",
"_shards" : {
"total" : 0,
"successful" : 0,
"failed" : 0
},
"_seq_no" : 6,
"_primary_term" : 1
}
post和put不带_update,都不与前内容做对比
DELETE customer/external/1 // 删除一条数据
DELETE customer //删除索引
ES没有提供删除类型的操作
POST customer/external/_bulk
{"delete": {"_index": "website", "_type": "blog", "_id": "123"}}
{"create": {"_index": "website", "_type": "blog", "_id": "123"}}
{"title": "first blog"}
{"index": {"_index": "website", "_type": "blog"}}
{"title": "second blog"}
{"update": {"_index": "website", "_type": "blog", "_id": "123"}}
{"doc":{"title": "update blog"}}
语法格式
{action:{metadata}}\n
{request body} \n
{action:{metadata}}\n
{request body} \n
index和create区别
index时会检查_version。如果插入时没有指定_version,那对于已有的doc,_version会递增,并对文档覆盖。插入时如果指定_version,如果与已有的文档_version不相等,则插入失败,如果相等则覆盖,_version递增。
create时也会检查_version,但是对于已有的文档,不会创建新文档,即插入失败。
到此,关于“ElasticSearch基本操作有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/3227593/blog/4561393