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

news/2024/11/8 20:08:18 标签: elasticsearch, jenkins, 大数据

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

ElasticSearch文档的操作;

添加文档

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

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
POST goboy-blog/_doc
{
  "title":"我的第二个文档",
  "data":"2023-11-2",
  "content":"用心记录技术,走心分享,始于后端,不止于后端,励志成为一名优秀的全栈架构师,真正的实现码中致富。"
}

请在此添加图片描述

查找文档

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

GET goboy-blog/_doc/1

请在此添加图片描述

查看索引中所有文档内容

GET goboy-blog/_search

请在此添加图片描述

判断文档是否存在

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

Head goboy-blog/_doc/1

请在此添加图片描述

Head goboy-blog/_doc/2

请在此添加图片描述

批量获取文档

  • 获取goboy-blog索引中编号为1和2的文档
GET goboy-blog/_mget
{
  "ids":["1","2"]
}

请在此添加图片描述

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

POST goboy-blog/_mget
{
  "ids":["1","2"]
}

文档更新

普通更新(根据id)

PUT goboy-blog/_doc/1
{
  "title":"更新我的第一个文档"
}

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

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

请在此添加图片描述

 GET goboy-blog/_doc/1

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

请在此添加图片描述

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

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

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
PUT goboy-blog/_doc/2
{
  "title":"我的第二个文档",
  "data":"2023-11-2",
  "content":"用心记录技术,走心分享,始于后端,不止于后端,励志成为一名优秀的全栈架构师,真正的实现码中致富。"
}

请在此添加图片描述

POST goboy-blog/_update/2
{
  "script": {
    "lang": "painless",
    "source": "ctx._source.tags=[\"java\",\"js\"]"
  }
}

请在此添加图片描述

  • 获取文档内容:

请在此添加图片描述

  • 使用add方法为tags标签添加一个元素css
POST goboy-blog/_update/2
{
  "script": {
    "lang": "painless",
    "source": "ctx._source.tags.add(\"css\")"
  }
}

请在此添加图片描述

  • 再次获取文档内容:

请在此添加图片描述

  • 也可以使用一些复杂的 if-else逻辑
  • 如果文档中的tags标签包含css内容,则删除此文档,否则什么都不做

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

请在此添加图片描述

  • 查询

请在此添加图片描述

查询更新

  • 当前数据

请在此添加图片描述

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

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

  • 文档内容:
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 的文档

DELETE goboy-blog/_doc/VF9xiosBWWxO5_dDHEpm

请在此添加图片描述

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

查询删除

查询删除是 POST 请求。

语法:POST {index}/_delete_by_query

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

POST goboy-blog/_delete_by_query
{
  "query":{
    "term":{
      "title":"666"
    }
  }
}

请在此添加图片描述

请在此添加图片描述

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

POST goboy-blog/_delete_by_query
{
  "query":{
    "match_all":{}
  }
}

请在此添加图片描述

  • 查询

请在此添加图片描述

批量操作

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

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

{"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 文件创建成功后,放到服务器的某个目录下,执行请求命令,如下:

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

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


http://www.niftyadmin.cn/n/5744382.html

相关文章

【Python】图片处理

一、获取图片尺寸 优点缺点Pillow功能丰富,支持多种图像处理操作。使用简单,适合快速原型开发。对于处理大型图像或批量图像时,性能可能不如OpenCV。OpenCV性能强大,适合处理大型图像和视频处理。提供了丰富的计算机视觉算法。相…

Call For Speaker! |2025中国国际音频产业大会(GAS)演讲嘉宾征集令启动!

2025中国国际音频产业大会(GAS)已定档2025年3月26-27日。 GAS 2025演讲嘉宾征集正式启动!我们将再次汇聚音频领域的专家和行业领袖,力求为与会者呈现一场内容丰富、精彩纷呈的知识盛宴。 SPRGASING FESTIVAL 如果 您在音频领域…

关于elementui el-radio 赋值问题

今天遇到这样的问题&#xff1a; 点击的时候&#xff0c;同时选中 照抄官网&#xff01; 后来发现了问题&#xff1a; 也就是说如果你的版本太低&#xff0c;就不能用value&#xff0c;而得用label&#xff0c;于是修改 <el-radio-group v-model"searchTime"&g…

【数据结构】线性表——链表

写在前面 本篇笔记记录线性表——链表的主要形式&#xff0c;虽然链表有8种形式&#xff0c;但是只要精通笔记中编写的两种&#xff0c;即可触类旁通。 文章目录 写在前面一、链表的概念及结构二、链表的分类三、无头单向非循环链表3.1、链表的实现3.1.1、链表的结构体定义3.1…

Python中的 if __name__ == ‘__main__

在Python中&#xff0c;if __name__ __main__: 这行代码有一个特定的用途和含义。为了理解它&#xff0c;我们需要先了解Python中的__name__变量以及Python脚本是如何执行的。 __name__变量 每个Python模块&#xff08;python文件&#xff09;都有一个内置的属性__name__。当…

ESLint 使用教程(一):从零配置 ESLint

前言 在现代前端开发中&#xff0c;代码质量和风格一致性是团队合作和项目维护的重要因素。而 ESLint 作为一款强大的 JavaScript 静态代码分析工具&#xff0c;能够帮助开发者发现和修复代码中的潜在问题。本文将详细介绍 ESLint 的常用规则配置&#xff0c;并结合实际应用场…

如何下载无水印的TikTok视频

随着TikTok的全球风靡&#xff0c;越来越多的人加入到这个平台&#xff0c;上传自己的创意短视频与世界分享。TikTok还成为了信息传播、娱乐消遣和营销推广的重要工具。许多人也希望能够下载喜欢的视频保存下来&#xff0c;尤其是没有水印的视频&#xff0c;方便用于二次创作或…

AI大模型引领软件开发变革:探索流程重塑、优势挑战与未来发展趋势

“AI大模型引领软件开发变革&#xff1a;探索流程重塑、优势挑战与未来发展趋势” 方向一&#xff1a;流程与模式介绍【传统软件开发 VS AI参与的软件开发】 在传统软件开发流程中&#xff0c;软件开发通常遵循一系列固定的步骤&#xff0c;包括需求分析、系统设计、编码、测…