前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >ES文档:文档操作_doc(7.9.2)

ES文档:文档操作_doc(7.9.2)

原创
作者头像
不惑
发布2023-11-03 08:16:20
发布2023-11-03 08:16:20
67500
代码可运行
举报
文章被收录于专栏:GoboyGoboy
运行总次数:0
代码可运行

用心记录技术,走心分享,始于后端,不止于后端,励志成为一名优秀的全栈架构师,真正的实现码中致富。

ElasticSearch文档的操作;

添加文档

新建一个索引 goboy-blog,如果添加文档索引不存在则会创建一个索引。

代码语言:javascript
代码运行次数:0
复制
PUT goboy-blog/_doc/1
{
  "title":"我的第一个文档",
  "data":"2023-11-2",
  "content":"用心记录技术,走心分享,始于后端,不止于后端,励志成为一名优秀的全栈架构师,真正的实现码中致富。"
}

Elasticsearch文档索引的响应示例,包含了以下关键信息:

"_index": 这是文档所属的索引的名称,这里是"goboy-blog"。

"_type": 在Elasticsearch 7.x版本之后,通常为"_doc",表示默认文档类型。

"_id": 这是文档的唯一标识符,用于在索引中唯一标识文档。在这里,文档的ID是"1"。

"_version": 这是文档的版本号,表示文档的版本。在这里,文档的版本号是1。

"result": 这是文档索引操作的结果,这里是"created",表示文档已经成功创建。

"_shards": 这是关于文档索引操作的分片信息。

"total": 这是总分片数量,这里是2。

"successful": 这是成功索引的分片数量,这里是1。这表示在2个分片中的1个成功索引。

"failed": 这是失败的分片数量,这里是0。表示没有分片索引操作失败。

"_seq_no": 这是文档的序列号,用于跟踪文档的变化。

"_primary_term": 这是文档所在的主分片的主要期(primary term)。

这个响应表明文档成功地被索引到了"goboy-blog"索引中,索引操作是成功的,只有一个分片成功地完成了索引操作。索引操作通常用于将文档添加到Elasticsearch索引中,以便后续搜索和检索。

知识点!!!

  • 使用PUT请求添加文档时必须携带文档id,否则会出错
  • 使用POST请求添加文档可以不携带文档id,会自动创建一个文档id
代码语言:javascript
代码运行次数:0
复制
POST goboy-blog/_doc
{
  "title":"我的第二个文档",
  "data":"2023-11-2",
  "content":"用心记录技术,走心分享,始于后端,不止于后端,励志成为一名优秀的全栈架构师,真正的实现码中致富。"
}

查找文档

代码语言:javascript
代码运行次数:0
复制
GET goboy-blog/_doc/2
  • 获取编号(ID)为2的文档:

Elasticsearch文档检索的响应示例,包含了以下关键信息:

"_index": 这是文档所属的索引的名称,这里是"goboy-blog"。

"_type": 在Elasticsearch 7.x版本之后,通常为"_doc",表示默认文档类型。

"_id": 这是文档的唯一标识符,用于在索引中唯一标识文档。在这里,文档的ID是"2"。

"found": 这是一个布尔值,表示是否找到了文档。在这里,值为false,表示未找到ID为"2"的文档。

这个响应表明尝试检索ID为"2"的文档,但未找到该文档,因此found字段的值为false。文档检索操作通常用于从索引中检索文档,如果文档存在,则会返回文档的详细信息,如果文档不存在,则会返回found字段为false

代码语言:javascript
代码运行次数:0
复制
GET goboy-blog/_doc/1

查看索引中所有文档内容

代码语言:javascript
代码运行次数:0
复制
GET goboy-blog/_search

判断文档是否存在

根据id判断指定文档是否存在

代码语言:javascript
代码运行次数:0
复制
Head goboy-blog/_doc/1

代码语言:javascript
代码运行次数:0
复制
Head goboy-blog/_doc/2

批量获取文档

  • 获取goboy-blog索引中编号为1和2的文档
代码语言:javascript
代码运行次数:0
复制
GET goboy-blog/_mget
{
  "ids":["1","2"]
}

这里直接用POST请求批量查询比较好的。

代码语言:javascript
代码运行次数:0
复制
POST goboy-blog/_mget
{
  "ids":["1","2"]
}

文档更新

普通更新(根据id)

代码语言:javascript
代码运行次数:0
复制
PUT goboy-blog/_doc/1
{
  "title":"更新我的第一个文档"
}

文档更新一次,_version 就会加1;

更新某个字段的值会覆盖整个文档:

代码语言:javascript
代码运行次数:0
复制
 GET goboy-blog/_doc/1

通过查询发现,字段已经被覆盖

大多数时候我们只需要更新某一个字段的值,所以我们采取以下方式:

请求格式: POST {index}/_update/{id}

代码语言:javascript
代码运行次数:0
复制
POST goboy-blog/_update/1
{
  "script": {
    "lang": "painless",
    "source": "ctx._source.title=params.title",
    "params": {
      "title":"更新我的第一个文档"
    }
  }
}

查看

Elasticsearch的更新请求,它试图更新索引中的文档。让我来解释这个请求的各个部分:

POST goboy-blog/_update/2: 这是HTTP请求,用于更新索引中的文档。以下是各个部分的解释:

goboy-blog: 这是索引的名称,表示要对"goboy-blog"索引进行操作。

_update: 这是Elasticsearch的更新操作,用于部分更新文档。

2: 这是文档的唯一标识符(ID),表示要更新的文档的ID。在这里,文档的ID是"2"。

"script": 这是更新文档时使用的脚本。

"lang": 这是脚本语言,这里是"Painless",一种用于Elasticsearch的脚本语言。

"source": 这是脚本的源代码,指定了要执行的脚本逻辑。脚本的作用是将文档中的"title"字段更新为"我是一个标题"。

"params": 这是脚本参数,允许将参数传递给脚本。在这里,参数"title"被设置为"我是一个标题"。

这个请求的目的是将ID为"2"的文档中的"title"字段更新为"我是一个标题"。更新请求中的脚本部分使用Painless脚本语言来执行更新操作。请注意,这是一个示例请求,实际应用中需要根据具体需求和文档结构来编写更新请求。

添加字段

  • 增加一个文档的字段tags并为其赋值
  • 增加tags标签并为其赋值 java,js
代码语言:javascript
代码运行次数:0
复制
PUT goboy-blog/_doc/2
{
  "title":"我的第二个文档",
  "data":"2023-11-2",
  "content":"用心记录技术,走心分享,始于后端,不止于后端,励志成为一名优秀的全栈架构师,真正的实现码中致富。"
}

代码语言:javascript
代码运行次数:0
复制
POST goboy-blog/_update/2
{
  "script": {
    "lang": "painless",
    "source": "ctx._source.tags=[\"java\",\"js\"]"
  }
}

  • 获取文档内容:
  • 使用add方法为tags标签添加一个元素css
代码语言:javascript
代码运行次数:0
复制
POST goboy-blog/_update/2
{
  "script": {
    "lang": "painless",
    "source": "ctx._source.tags.add(\"css\")"
  }
}

  • 再次获取文档内容:
  • 也可以使用一些复杂的 if-else逻辑
  • 如果文档中的tags标签包含css内容,则删除此文档,否则什么都不做
代码语言:javascript
代码运行次数:0
复制

POST goboy-blog/_update/2
{
  "script": {
    "lang": "painless",
    "source": "if(ctx._source.tags.contains(\"css\")){ctx.op=\"delete\"}else{ctx.op=\"none\"}"
  }
}

  • 查询

查询更新

  • 当前数据

通过条件查询找到文档,然后进行更新

例如:将title包含“更新”的文档的content修改为“非常非常的走心”。

  • 文档内容:
代码语言:javascript
代码运行次数:0
复制
POST goboy-blog/_update_by_query
{
  "script": {
    "source": "ctx._source.content=\"非常非常的走心\"",
    "lang": "painless"
  },
  "query": {
    "term": {
        "title": "666"
    }
  }
}
  • 更新结果:

Elasticsearch批量操作的响应示例,包含了有关操作执行的各种统计信息和指标。以下是响应中各个字段的解释:

"took": 表示操作花费的时间,这里是6毫秒。

"timed_out": 是一个布尔值,表示操作是否超时,这里是false,表示操作未超时。

"total": 表示操作涉及的文档总数,这里是1,表示有1个文档被操作。

"updated": 表示已经更新的文档数量,这里是1,表示1个文档被更新。

"deleted": 表示已经删除的文档数量,这里是0,表示没有文档被删除。

"batches": 表示操作执行的批次数量,这里是1,表示有1个批次的操作。

"version_conflicts": 表示发生版本冲突的文档数量,这里是0,表示没有版本冲突。

"noops": 表示没有实际操作的文档数量,这里是0,表示所有操作都是有效的。

"retries": 包含了重试操作的信息,分为bulk(批量操作)和search(搜索操作)两种类型,这里都是0,表示没有重试操作。

"throttled_millis": 表示操作由于限流而被暂停的时间,这里是0毫秒,表示没有限流暂停。

"requests_per_second": 表示每秒执行的操作请求数,这里是-1.0,表示没有限制。

"throttled_until_millis": 表示限流操作将持续暂停的时间,这里是0毫秒,表示没有限流。

"failures": 包含了有关操作中发生的错误的详细信息,这里是一个空数组,表示没有错误。

这个响应表明执行的操作更新了1个文档,操作总数为1,没有发生错误或冲突。通常,这种情况表示操作成功,并且已经更新了指定文档。

删除文档

根据id删除

语法:DELETE {index}/_doc/{id}

删除一个id为 VF9xiosBWWxO5_dDHEpm 的文档

代码语言:javascript
代码运行次数:0
复制
DELETE goboy-blog/_doc/VF9xiosBWWxO5_dDHEpm

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

查询删除

查询删除是 POST 请求。

语法:POST {index}/_delete_by_query

例如:删除 title 中包含 666 的文档:

代码语言:javascript
代码运行次数:0
复制
POST goboy-blog/_delete_by_query
{
  "query":{
    "term":{
      "title":"666"
    }
  }
}

删除某一个索引下的所有文档:

代码语言:javascript
代码运行次数:0
复制
POST goboy-blog/_delete_by_query
{
  "query":{
    "match_all":{}
  }
}

  • 查询

批量操作

通过 API 可以执行批量索引、批量删除、批量更新等操作。

搞一个名为 goboy.json 的文件,内容如下:

代码语言:javascript
代码运行次数:0
复制
{"index":{"_index":"goboy","_id":"123"}}
{"name":"Javaboy"}
{"update":{"_index":"goboy","_id":"123"}}
{"doc":{"name":"C++boy"}}

第一行:index 表示要执行一个索引操作(这个表示一个 action,其他的 action 还有 create,delete,update)。

  • _index 定义了索引名称,这里表示要创建一个名为 goboy的索引;
  • _id 表示新建文档的 id 为 123;

第二行是第一行操作的参数。

第三行的 update 则表示要更新。

第四行是第三行的参数。

注意!!!,结尾要空出一行。

goboy.json 文件创建成功后,放到服务器的某个目录下,执行请求命令,如下:

代码语言:javascript
代码运行次数:0
复制
curl -XPOST "http://localhost:9200/goboy/_bulk" -H "content-type:application/json" --data-binary @/opt/goboy.json

执行完成后,就会创建一个名为 goboy的索引了,同时向该索引中添加一条记录,再修改该记录;

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 添加文档
    • 知识点!!!
  • 查找文档
    • 查看索引中所有文档内容
  • 批量获取文档
  • 文档更新
    • 普通更新(根据id)
  • 添加字段
  • 查询更新
  • 删除文档
    • 根据id删除
    • 查询删除
  • 批量操作
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档