环境:
Elasticsearch: 6.2.2
Kibana: 6.2.2
os: centos 7
原文参考地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/_modifying_your_data.html
原文参考地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/_updating_documents.html
原文参考地址:https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update-by-query.html
1、数据修改
上文中演示了如何创建index然后插入doc,再数据已经插入之后如何修改数据呢,参考下面
命令:
PUT /customer/_doc/1?pretty
{
"name": "wandy"
}
然后GET customer/_doc/1 查看结果:
结果已经成功修改,注意
1、ES提供的对数据的控制和查询是一个接近实时的,也就意味着,当你修改了数据(新增、修改、删除)以后,你可以认为它有大概1秒钟的延时才能出现在反映到你的搜索结果中,这是和传统SQL的区别。
2、对数据的修改必须带有ID,否则ES会认为是新增数据,然后自动生成对应的ID,另外也可以使用如下方式让ES自动生成新增数据的ID
POST /customer/_doc?pretty
{
"name": "Jane Doe"
}
2、其他修改方式
a、POST /customer/_doc/1/_update?pretty
{
"doc": { "name": "Jane Doe" }
}
b、修改的同时再新增一个字段
POST /customer/_doc/1/_update?pretty
{
"doc": { "name": "Jane Doe", "age": 20 }
}
c、脚本的方式
POST /customer/_doc/1/_update?pretty
{
"script" : "ctx._source.age += 5"
}
3、 ES同时也提供了按照条件更新,就像SQL中的update--where ,使用的是_update_by_query
4、删除document
命令:DELETE /customer/_doc/2?pretty
5、批量操作(使用_bulk API)
a、批量插入
POST /customer/_doc/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{ "name": "Jane Doe" }
或者包含不指定的ID的
POST /customer/_doc/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}