- 全量修改
- 局部修改
- 删除文档
全量修改也叫完全覆盖. 请求方式put 请求url: http://127.0.0.1:9200/shopping/_doc/1
代表对id为1的数据进行修改 请求体: 内容为要全量修改的数据内容
{
"title": "小米手机",
"category": "小米1",
"images": "http://xiaomi.com",
"price": 1999.00
}
执行结果, result为update代表为更新操作.
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_version": 4,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 8,
"_primary_term": 1
}
执行查询: 请求url: http://127.0.0.1:9200/shopping/_doc/1
请求方式为get 请求结果为:
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_version": 8,
"_seq_no": 12,
"_primary_term": 1,
"found": true,
"_source": {
"title": "小米手机",
"category": "小米1",
"images": "http://xiaomi.com",
"price": 1999.00
}
}
全量修改, 如果只传递某几个字段: 例如执行http://127.0.0.1:9200/shopping/_doc/1
的put请求时, 请求体如下:
{
"title": "小米手机",
"category": "小米1",
"price": 1999.00
}
再次执行查询操作. 结果如下: 可以看到只有三个属性了.
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_version": 9,
"_seq_no": 13,
"_primary_term": 1,
"found": true,
"_source": {
"title": "小米手机",
"category": "小米1",
"price": 1999.00
}
}
局部修改
由于局部更新, 每次更新的结果不是相同的, 因此不是幂等性操作, 因此不支持put操作, 只支持post请求操作. 请求url: 注意id前面是_update 代表要执行更新操作 http://127.0.0.1:9200/shopping/_update/1
请求体如下: 代表要把id为1的title更新为"华为手机"
{
"doc": {
"title": "华为手机"
}
}
执行结果如下:
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_version": 10,
"result": "noop",
"_shards": {
"total": 0,
"successful": 0,
"failed": 0
},
"_seq_no": 14,
"_primary_term": 1
}
再次执行查询操作: 结果如下, 成功把id为1的title进行了修改, 并且没有像全量修改那样, 把未修改的属性给弄没了.
请求方式 delete 请求url: http://127.0.0.1:9200/shopping/_doc/1
请求结果:
{
"_index": "shopping",
"_type": "_doc",
"_id": "1",
"_version": 11,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 15,
"_primary_term": 1
}
由于在es中,删除一个文档并不是真的删除, 只是打一个标记的逻辑删除, 因此, 在上面删除的例子中, 如果下次再创建一个id为1的文档, 则_version字段会进行递增为12.