ElasticSearch的文档操作

ElasticSearch的文档操作

1、新建文档

新建文档首先要新建一个索引

# 创建索引
PUT blog

新建文档:

# 新建文档(PUT中的“1”是添加的文档的id)
PUT blog/_doc/1
{
  "title":"添加文档",
  "date":"2020/12/13",
  "content":"文档的内容哒哒哒"
}

# 不指定id添加文档的方法(会自动生成id)
POST blog/_doc
{
  "title":"不指定id",
  "date":"2020/12/13",
  "content":"使用POST请求添加文档"
}

两种方式添加文档后的结果:

在这里插入图片描述

2、获取文档

# 获取文档
GET blog/_doc/1

# 获取不存在的文档(返回的json数据中会显示"found" : false)
GET blog/_doc/2

# 探测某个文档是否存在
HEAD blog/_doc/1  # 存在返回200
HEAD blog/_doc/2  # 不存在返回404

# 批量获取文档是否存在
GET blog/_mget
{
  "ids":["1","xxx"]
}

GET blog/_doc/1执行时(查询成功)返回的JSON数据:

在这里插入图片描述

3、更新文档

对文档进行更新操作时,文档每更新一次,_version的值就会+1

1、直接put会替换整个文档的内容

# 1 更新整个文档(原先的数据全部抹去)
PUT blog/_doc/TMCtW3YB6Yv6dK2N-lA4
{
  "title":"更新了整个文档"
}

2、借助脚本实现指定字段的更新

  • lang:指定了使用的脚本语言,painless是ES内置的一个脚本语言
  • source:表示具体执行的内容
  • ctx:代表上下文对象,可以借助ctx访问_source等内容
    • ctx.op="xxx"表示进行的操作(下面的delete表示删除整个文档,none表示不进行任何操作)
  • add、if/else等都是脚本语言的一些基础功能
# 2 更新某个字段 借助脚本来实现
POST blog/_update/1
{
  "script": {
    "lang": "painless",
    "source": "ctx._source.title=params.title", 
    "params": {
      "title":"更新了指定的字段"
    }
  }
}

# 直接向原先的文档中添加字段
# (不借助外部的变量,直接在source中赋值时要对引号进行转译)
POST blog/_update/1
{
  "script": {
    "lang": "painless",
    "source": "ctx._source.tags=[\"Java\",\"Python\"]"
  }
}

# 修改数组,比如进行增加操作(add方法)
POST blog/_update/1
{
  "script": {
    "lang": "painless",
    "source": "ctx._source.tags.add(\"JavaScript\")"
  }
}

# if else条件判断
POST blog/_update/1
{
  "script": {
    "lang": "painless",
    "source": 
      "if(ctx._source.tags.contains(\"Java\")){ctx.op=\"delete\"}else{ctx.op=\"none\"}"
  }
}

3、查询更新

根据条件查询文档,然后更新该文档

模拟更新,先新建一个文档:

PUT blog/_doc/2
{
  "title":"doc01",
  "content":"最初的内容..."
}

在这里插入图片描述

根据条件更新:

如下,就是将title为"doc01"的文档的content修改为"修改后的数据"

POST blog/_update_by_query
{
  "script": {
    "source": "ctx._source.content=\"修改后数据\"",
    "lang": "painless"
  },
  "query": {
    "term": {
      "title":"doc01"
    }
  }
}

4、删除文档

根据id删除

如果在添加文档时指定了路由,那么删除文档时也要指定路由,否则删除会失败

DELETE blog/_doc/1

查询删除

# 根据条件删除
POST blog/_delete_by_query
{
  "query":{
    "term":{
      "title":"doc01"
    }
  }
}

删除索引下的所有文档

# 删除索引下的所有文档
POST blog/_delete_by_query
{
  "query":{
    "match_all":{}
  }
}

5、批量操作

ElasticSearch中可以通过Bulk API进行批量索引、删除、更新等操作。

做法是将所有操作写入一个json文件中,通过post请求上传该json文件并执行。

如创建一个JSON文件
在这里插入图片描述

  • 第一行:表示进行索引操作,新建一个名为person的索引,_id表示新建文档的id为1;
  • 第二行:代表第一行操作的参数,创建的id为1的文档的name值为"Fall"
  • 第三行:进行更新操作,对索引为person中id为1的文档进行更新
  • 第四行:表示更新文档的name为"sprogFall"

注意文件的最后一行要空出一行,否则会出现错误:

{“error”:{“root_cause”:[{“type”:“illegal_argument_exception”,“reason”:“The bulk request must be terminated by a newline [\n]”}],“type”:“illegal_argument_exception”,“reason”:“The bulk request must be terminated by a newline [\n]”},“status”:400}

最后通过CMD命令发送给ES服务器并执行:

@后面加文件名(如果命令行不在当前文件的目录下,则必须指定文件的路径)

curl -XPOST "http://localhost:9200/person/_bulk" -H "content-type:application/json" --data-binary @script.json

最后的效果,name已经是update后的内容:

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值