关于ElasticSearch新建文档的姿势

news2024/9/27 5:43:26

 定义如下mapping,并且创建索引,索引包括四个字段

有三个分片 (number_of_shards),每个分片有一个副本分片(number_of_replicas)

PUT books
{
  "mappings": {
    "properties": {
      "book_id": {
        "type": "keyword"
      },
      "name": {
        "type": "text"
      },
      "author": {
        "type": "keyword"
      },
      "intro": {
        "type": "text"
      }
    }
  },
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}

ElasticSearch提供了两种新建索引的方式,一种是使用 Index API 索引文档,一种是使用 Create API 创建文档。

1、通过 Index API 索引文档

PUT books/_doc/1
{
  "book_id": 1,
  "name": "linux入门到放弃",
  "author": "huayuanbb",
  "intro": "test"
}

返回的数据为

{
  "_index" : "books",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 3,
  "_primary_term" : 1
}

result 为 created 创建,且version为1,通过Index API新建的文档,如果id已经存在的情况下,多次执行,不会报错,只会将返回结果的result 变为 updated version在原来的基础上 +1.

其实在索引一个文档的时候,如果文档 ID 已经存在,会先删除旧文档,然后再写入新文档的内容,并且增加文档版本号

2、通过 create API 创建文档

通过create API 创建文档有两种方式 POST 和 PUT

POST方式

POST books/_doc
{
  "book_id": 1,
  "name": "linux入门到放弃",
  "author": "huayuanbbsssss",
  "intro": "test"
}

采用POST方式创建的文档,无需指定id,系统会自动生成UUID

 PUT方式

PUT books/_create/2
{
  "book_id": 1,
  "name": "linux入门到放弃",
  "author": "ss",
  "intro": "test"
}

如上示例,使用 PUT 的方式创建文档需要指定文档的 ID,如果文档 ID 已经存在,则返回 http 状态码为 409 的错误。

总结

序号 语句特性描述
1PUT books/_doc/1插入时需要指定id,且重复插入相同id的文档,只会将返回的结果中的version自增,且result改为updated,本质上是先删除,再写入,并将版本号+1
2PUT books/_create/1插入时同样需要指定id,但当插入相同id的文档时,会返回状态码为409的错误
3POST books/_doc/不需要指定文档 ID, 系统自动生成。

上表是新建文档时 3 种写法的总结,如果你有更新文档内容的需求,应该使用第一种方式。如果写入文档时有唯一性校验需求的话,应该使用第二种方式。如果需要系统为你创建文档 ID,应该使用第三种方式。相对于第一种方式来说,第三种方式写入的效率会更高,因为不需要在库里查询文档是否已经存在,并且进行后续的删除工作

同时更新不仅仅可以通过 PUT books/_doc/1 来实现,ElasticSearch也提供了Update API来完成更新操作。

POST books/_update/2
{
  "doc": {
    "name":"时间简史(视频版)",
    "intro": "探索时间和空间核心秘密的引人入胜的视频故事。"
  }
}

#结果
{
  "_index" : "books",
  "_type" : "_doc",
  "_id" : "2",
  "_version" : 3,
  "result" : "updated",
  ......
}

二者间的区别是updated是在原数据上进行修改,而PUT操作是之间将原数据删除,再插入一条新纪录,且Update只指定要更新的字段即可。

除了使用指定 ID 的方式来更新数据外,还可以用 update_by_query 的方式:

POST books/_update_by_query
{
  "query": {
    "term": {
      "book_id": {
        "value": 1
      }
    }
  },
  "script": {
    "source": "ctx._source.name='深入Linux内核架构'",
    "lang": "painless"
  }
}

执行完上述代码后,再执行 GET books/_doc/2 操作

可以发现已经修改成功了 ,脚本中 'ctx._source' 可以拿到匹配的文档的数据,所以 ctx._source.name='深入Linux内核架构' 的意思是将匹配文档的 'name' 字段的数据设置为 '深入Linux内核架构'。

需要注意的是,如果 query 中匹配的文档数量巨大,那么这个接口在 kibana 中执行的时候可能会发生超时的错误,当然你可以在请求中使用 timeout 参数,但是这个不是解决问题的有效方案。我建议你使用异步的方式进行处理,并且控制需要更新的数据量,例如按日期分批来进行更新,即在请求的URL后携带一个参数,wait_for_completion=false,其结果会返回一个task id ,再通过

GET _tasks/task_id 来查询任务的执行状态

POST books/_update_by_query?wait_for_completion=false
{
  "query": {
    "term": {
      "book_id": {
        "value": 1
      }
    }
  },
  "script": {
    "source": "ctx._source.name='深入Linux内核架构111'",
    "lang": "painless"
  }
}

{
  "task" : "CyKKcsubQBupaq7v4Yc_Rg:1102573"
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[SUCTF 2018]MultiSQL(预处理)

打开界面发现注册admin已经有了这个用户,就注册了一个admin 然后功能都看一下,发现有一个id的get传参,所以我们可以传参数,实验一下是不是sql注入点 id1的时候显示了admin的用户,想到了水平越权的问题。但还是没啥&am…

计数指针 std::shared_ptr

shared_ptr 共享指针 shared_ptr 计数指针称为共享指针&#xff0c;可以共享数据。shared_ptr 创建了一个计数器与类对象所指的内存相关联Copy 之后计数器加一&#xff0c;销毁之后计数器减一。计数器 API 接口为 &#xff1a;use_count() 测试代码&#xff1a; #include <…

Python + Django开发在线考试管理系统(附源码)

本文最终实现一个Web在线考试管理系统&#xff0c;可作为Python Web&#xff0c;Django的练手项目&#xff0c;也可以作为计算机毕业设计参考项目。 文章目录系统功能需求分析系统设计及实现思路源码分享&系统实现过程系统展示系统功能需求分析 在线考试管理系统&#xff…

机器学习中的数学原理——二分类问题

今天是2022年的最后一天&#xff0c;提前祝大家新年快乐&#xff01;这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟&#xff0c;也希望对你的学习有帮助哦&#xff01;感兴趣的小伙伴欢迎私信或者评论区留言&#xff01;这一篇就更新一下《白话机器学习中的数…

shell流程控制之条件判断练习

1、ping主机测试,查看主机是否存活&#xff1b; #!/bin/bash ######################### #File name:ping.sh #Version:v1.0 #Email:admintest.com #Created time:2022-12-28 05:06:21 #Description: ######################### var$( ifconfig ens33 | grep inet | grep -v…

【JavaSE成神之路】Java面向对象(下)

哈喽&#xff0c;我是兔哥呀&#xff0c;今天就让我们继续这个JavaSE成神之路&#xff01; 这一节啊&#xff0c;咱们要学习的内容还是Java的面向对象。 1. 构造方法 构造方法和new关键字是一对好拍档。 在之前GirlFriend的例子中&#xff0c;我们写了两个构造方法&#xff…

gl inet mt1300读写性能测试

为什么买这个路由器 1.最近需要一个路由器, 2.我需要在局域网存储一些东西方便手机电脑访问(微型nas), 3.另外还希望这个路由器是开源智能路由器(能装插件玩), 4.小,非常小,typec 供电(5v 1.5A),非常方便,支持tf卡 usb3.0 wifi 5GHz (1)不用nas的原因:我只是轻度使用nas,专…

Fedora 装系统后连接不上无线网络和蓝牙设备

Fedora 装系统后连接不上蓝牙鼠标0.升级系统&#xff0c;升级后仍然无法使用&#xff0c;执行步骤1-3的方法。1.查看本机是否有无线硬件模块——有2. 查看本机是否有蓝牙固件【驱动】——无3. 安装无线网络驱动3.1 打开终端3.2 安装dnf并配置3.3 使用dnf安装kmod-wl&#xff0c…

钉钉6亿用户的哲学:产业互联网的海洋里,没有人是一座孤岛

除了拥有大人口和大市场条件的中国&#xff0c;或许难有另一个国家再现数亿人共同投身产业互联网的场景。除了钉钉&#xff0c;或许也很难有别的软件能同时承载6亿人的数字化理想。 12月28日&#xff0c;钉钉总裁叶军在2022钉钉7.0产品发布会上&#xff0c;带来了钉钉的最新数…

知识变现海哥:如何将你的知识变成一套解决方案

知识变现海哥&#xff1a;如何将你的知识变成一套解决方案 之前我说过我们卖的不是自己能力&#xff0c;而是一套成体系的解决方案&#xff0c;因为没有人会单纯地为能力买单&#xff0c;我们越是能证明自己的能力有价值&#xff0c;就越能将自己的能力卖高价。而价值要怎么证…

Acwing---789.数的范围

数的范围1.题目2.基本思想3.代码实现4.总结1.题目 给定一个按照升序排列的长度为n的整数数组&#xff0c;以及 q 个查询。 对于每个查询&#xff0c;返回一个元素k的起始位置和终止位置&#xff08;位置从0开始计数&#xff09;。 如果数组中不存在该元素&#xff0c;则返回“…

使用递归和非递归方式实现二叉树先序、中序、后序遍历

题目&#xff1a; 用递归和非递归方式&#xff0c;分别按照二叉树先序、中序和后续打印所有的节点。先序为根左右&#xff0c;中序为左根右&#xff0c;后序为左右根。 递归方式&#xff1a; &#xff08;1&#xff09;先序&#xff1a; //先序 根左右public static void pr…

TypeScript入门

这两天终于抽空学习了typescript&#xff0c;把欠了四年的帐给补上了。 废话不多说&#xff0c;先上官网链接&#xff1a;TypeScript中文网 TypeScript——JavaScript的超集 一、下载安装&#xff1a;用npm > npm install -g typescript 验证是否安装成功&#xff1a; …

保存网页内容 自动过滤广告和网页头尾

网页可以非常方便的为我们展示各种信息&#xff0c;如果遇到重要的资料文献&#xff0c;希望在本地电脑上保存下来该怎么操作呢&#xff1f;把网址添加到收藏夹&#xff0c;下次直接打开网址查看&#xff0c;但如果资源被网站删除&#xff0c;就再也找不到了。还是保存在自己电…

msf联动cs

Cobalt Strike简称CS 用于团队作战使用&#xff0c;由一个服务端和多个客户端组成&#xff0c;能让多个攻击者这在一个团队服务器上共享目标资源和信息&#xff0c;我们在使用msf获得权限以后&#xff0c;可以将信息共享到cs上&#xff0c;使用cs来进行监听以及其他的操作。 1…

理解Kotlin泛型

文章目录Kotlin泛型声明处型变协变< out T>逆变< in T>使用处型变(类型投影)参考Kotlin泛型 声明处型变 协变< out T> interface GenericsP<T> {fun get(): T //读取并返回T&#xff0c;可以认为只能读取T的对象是生产者 }如上声明了GenericsP<…

【C++】STL —— 用哈希表同时封装出unordered_set和unordered_map

目录 一、底层结构 1. 哈希的概念 二、哈希冲突 三、哈希函数 四、解决哈希冲突 1. 闭散列&#xff08;开放定址法&#xff09; 1. 线性探测 2. 二次探测 2. 闭散列的实现 3. 开散列&#xff08;拉链法&#xff09; 4. 开散列和闭散列的比较 五、HashTable的…

树莓派内核编译

文章参考&#xff1a; 深海游弋的鱼 – 默默的点滴 (mobibrw.com) 深海游弋的鱼 – 默默的点滴 (mobibrw.com) 1. 安装 git sudo apt install git 2. 下载树莓派内核源码 git clone --depth1 -b rpi-4.9.y https://github.com/raspberrypi/linux.git rpi-linux 3. 安装…

Python采集wangyi财经数据信息,做个可视化小案例

前言 2022年全球股市普跌&#xff0c;你亏了多少钱&#xff1f; 亏多少我也不知道&#xff0c;我只是想着来采集数据&#xff0c;做个可视化小案例来玩玩 话不多说&#xff0c;咱就直接开始吧 开发环境 解释器版本: python 3.8代码编辑器: pycharm 2021.2requests: pip ins…

Python笔记 | 卡布列克常数

0x00 前言 任意一个不是由完全相同数字组成的四位数&#xff0c;如果对它们的每位数字重新排序&#xff0c;组成一个较大的数和一个较小的数&#xff0c;然后用较大数减去较小数&#xff0c;差不够四位数时补零&#xff0c;类推下去&#xff0c;最后将变成一个固定的数&#xf…