参考文章:https://blog.csdn.net/zhuchunyan_aijia/article/details/129461431
1> 指定id 新增
_id =1 新增一条,此命令重复执行,就是更新id=1的数据
POST employee_zcy/_doc/1 { "uid" : "1234", "phone":"12345678909", "message" : "qq", "msgcode" : "1", "sendtime":"2019-03-14 01:57:04", "saymessage":"zcy11111111111" }
2> 不指定id 新增
_id是随机的字符串,此命令重复执行,就是不断新增
POST projecy_zcy/_doc { "projectCode":"31000012", "projectName":"xxxx12" } 下面的示例不指定id,则返回的数据中id是随机的字符串;
3> 指定id更新
更新整个文档, 和新增一样
POST employee_zcy/_doc/1 { "uid" : "1234", "phone":"12345678909", "message" : "qq", "msgcode" : "1", "sendtime":"2019-03-14 01:57:04", "saymessage":"zcy11111111111" } POST employee_zcy/_doc/1 { "uid" : "1234567" } 那么文档1的内容就: { "uid" : "1234567" }
4> 按照id,更新文档中部分字段
POST employee_zcy/_update/3 { "doc" : { "message":"qq456222", "age":13 } } 修改了id是3的 message, 结果: 修改了主键=3的中message 为 qq456111, 新增了age字段
5> 按照id, 使用脚本更新部分字段,支持参数param,支持拼接更新
POST projecy_zcy/_update/10 { "script": { "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName ", "params": { "personName":"zcy" } } } 修改_id=10的, projectCode的值, 新增projectPerson的,可以用参数变量进行字符处理 POST projecy_zcy/_update/4 { "script": { "source": "ctx._source['message'] = '123'; ctx._source.age=14" } }
6> 按照id, 使用脚本删除字段
POST projecy_zcy/_update/10 { "script": { "source": "ctx._source.remove('projectPerson')" } }
7> 根据条件修改, 多条数据更新, 更改部分字段
POST employee_zcy/_update_by_query { "query": { "term": { "phone": "12345678909" } } , "script": { "source": "ctx._source['message'] = '1234566666'" } } -- 搜索projectName like 管理域 , 增加flag值 POST projecy_zcy/_update_by_query { "query": { "match": { "projectName": "管理域" } }, "script":{ "source":"ctx._source.flag='abc'" } }
8> 按照id, 更新不存在的
此id,不存在,会报错
POST projecy_zcy/_update/16 { "script": { "source": "ctx._source.projectCode=1234567 ", "params": { "personName":"zcy" } } } 报错: { "type" : "document_missing_exception", "reason" : "[_doc][16]: document missing", "index_uuid" : "P--CS2RRStmmvjoicjFnmw", "shard" : "0", "index" : "projecy_zcy"
如何不报错? 我们可以使用 upsert
参数,指定如果文档不存在就应该先创建它
POST projecy_zcy/_update/15 { "script": { "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName ", "params": { "personName":"zcy" } }, "upsert": {"projectCode":234,"projectPerson":"345"} } id=15 不存在, 先初始化projectCode, projectPerson 第一次执行: { "_index" : "projecy_zcy", "_type" : "_doc", "_id" : "15", "_score" : 1.0, "_source" : { "projectCode" : 234, "projectPerson" : "345" } } 第二次执行: { "_index" : "projecy_zcy", "_type" : "_doc", "_id" : "15", "_score" : 1.0, "_source" : { "projectCode" : 1234567, "projectPerson" : "345zcy" } }
9> 按照条件,无匹配的更新
不好报错, 没有任何数据更新, 和关系数据库一样
10> 统一脚本
POST projecy_zcy/_update/15 { "script": { "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName ", "params": { "personName":"zcy" } }, "upsert": {"projectCode":234,"projectPerson":"345"} } 优化: 1.需要先将脚本post到es的库中,新建zcy_message,脚本名称 POST _scripts/zcy_script1 { "script":{ "lang":"painless", "source": "ctx._source.projectCode=1234567;ctx._source.projectPerson+=params.personName " } } lang: 必须有,否则报错 params: 不需要放, 放了也不生效 2.根据id来调用 POST projecy_zcy/_update/15 { "script": { "id": "zcy_script1", "params": { "personName":"aaa" } }, "upsert": {"projectCode":234,"projectPerson":"345"} }
11> 根据主键删除数据
DELETE employee_zcy/_doc/1 注意_doc 就是type的值, 插数据时候指定的 POST employee_zcy/_doc/1
根据条件删除数据
POST employee_zcy/_delete_by_query { "query":{ "term":{ "phone":"12345678909" } } }
12>bulk的操作
create 如果文档不存在就创建,但如果文档存在就返回错误
index 如果文档不存在就创建,如果文档存在就更新
update 更新一个文档,如果文档不存在就返回错误
delete 删除一个文档,如果要删除的文档id不存在,就返回错误
其实可以看得出来index是比较常用的。还有bulk的操作,某一个操作失败,是不会影响其他文档的操作的,它会在返回结果中告诉你失败的详细的原因。
>> 批量新增
POST projecy_zcy/_bulk {"index":{"_id":1}} {"id":1,"name":"admin","counter":"10","tags":["red","black"]} {"index":{"_id":2}} {"id":2,"name":"zcy"}
>> 批量修改
POST projecy_zcy/_bulk {"update":{"_id":1}} {"script":{"source":"ctx._source.name='www'"}} {"update":{"_id":1}} {"script":{"source":"ctx._source.name='zzzz'"}}
>> 批量删除
POST projecy_zcy/_bulk {"delete":{"_id":2}} {"delete":{"_id":1}}
标签:批量,ctx,zcy,source,._,操作,POST,id,ES From: https://www.cnblogs.com/wjs2019/p/18159327