Elasticsearch-文档增删改查及局部更新

Elasticsearch

文档,即索引库中的数据,会根据规则创建索引,将来用于搜索。可以类比做数据库中的一行数据

  • 新增文档
    新增文档时,涉及到id的创建方式,手动指定或者自动生成
    POST /索引名称/_doc/{id}
POST /my-company-index/_doc/1
{
"name" : "百度",
"job" : "小度用户运营经理",
"payment" : "30000",
"logo" :
"http://www.lgstatic.com/thubnail_120x120/i/image/M00/21/3E/CgpFT1kVdzeAJNbUAABJB7x9sm8374.png"
}

在这里插入图片描述

  • 新增文档(自动生成id)
    POST /索引名称/_doc
    {
    “field”:“value”
    }
POST /my-company-index/_doc
{
"name" : "百度",
"job" : "算法工程师",
"payment" : "50000",
"logo" :
"http://www.lgstatic.com/thubnail_120x120/i/image/M00/21/3E/CgpFT1kVdzeAJNbUAABJB7x9sm8374.png"
}

在这里插入图片描述

  • 查看文档
    可以看到结果显示为: created ,代表创建成功。
    另外,需要注意的是,在响应结果中有个 _id 字段,这个就是这条文档数据的 唯一标识 ,以后的增删改查都依赖这个_id作为唯一标示,这里是Elasticsearch帮我们随机生成的id
  • 查看单个文档
    GET /索引名称/_doc/{id}

在这里插入图片描述

在这里插入图片描述

  • 查看所有文档

POST /索引名称/_search
{
“query”:{
“match_all”: {
}
}
}

POST /my-company-index/_search
{
  "query": {
    "match_all": {}
  }
}
  • _source定制返回结果
    某些业务场景下,我们不需要搜索引擎返回source中的所有字段,可以使用source进行定制,如下,多
    个字段之间使用逗号分隔

GET /my-company-index/_doc/1?_source=name,job

在这里插入图片描述

  • 更新文档(全部更新)
    把刚才新增的请求方式改为PUT,就是修改了,不过修改必须指定id
    id对应文档存在,则修改
    id对应文档不存在,则新增
    比如,我们把使用id为3,不存在,则应该是新增
PUT /my-company-index/_doc/3
{
"name" : "百度",
"job" : "AI工程师",
"payment" : "60000",
"logo" :
"http://www.lgstatic.com/thubnail_120x120/i/image/M00/21/3E/CgpFT1kVdzeAJNbUAABJB7x9sm8374.png"
}


  • 更新文档(局部更新)
    Elasticsearch可以使用PUT或者POST对文档进行更新(全部更新),如果指定ID的文档已经存在,则执行
    更新操作。
    注意:Elasticsearch执行更新操作的时候,Elasticsearch首先将旧的文档标记为删除状态,然后添加新
    的文档,旧的文档不会立即消失,但是你也无法访问,Elasticsearch会在你继续添加更多数据的时候在
    后台清理已经标记为删除状态的文档。
    全部更新,是直接把之前的老数据,标记为删除状态,然后,再添加一条更新的(使用PUT或者
    POST)
    局域更新,只是修改某个字段(使用POST)
POST /索引名/_update/{id}
{
"doc":{
"field":"value"
}
}
#全量
PUT /my-company-index/_doc/3
{

"job" : "AI工程师"

}

# 部分更新
POST /my-company-index/_update/3
{
  "doc": {
    "job": "AI"
  }
}

删除

DELETE /索引名/_doc/{id}

DELETE /my-company-index/_doc/3

  • 根据查询条件进行删除
POST /索引库名/_delete_by_query
{
"query": {
"match": {
"字段名": "搜索关键字"
}
}
}
POST /my-company-index/_delete_by_query
{
  "query": {
    "match": {
      "字段名": "百度"
    }
  }
}
  • 删除所有文档
POST 索引名/_delete_by_query
{
"query": {
"match_all": {}
}
}

文档的全量替换、强制创建

  • 全量替换
    语法与创建文档是一样的,如果文档id不存在,那么就是创建;如果文档id已经存在,那么就是全量替换操作,替换文档的json串内容;

文档是不可变的,如果要修改文档的内容,第一种方式就是全量替换,直接对文档重新建立索引,替换里面所有的内容,elasticsearch会将老的文档标记为deleted,然后新增我们给定的一个文档,当我们创建越来越多的文档的时候,elasticsearch会在适当的时机在后台自动删除标记为deleted的文档

  • 强制创建
PUT /index/_doc/{id}?op_type=create {},PUT /index/_doc/{id}/_create {}

如果id 存在就会报错

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值