首页 > 其他分享 >ElasticSearch 文档操作

ElasticSearch 文档操作

时间:2024-01-02 12:32:46浏览次数:25  
标签:index name 文档 user 操作 ElasticSearch POST id


ElasticSearch 文档操作_数据

创建文档

指定id

// 无则插入,有则覆盖(覆盖的逻辑是先删除,再插入)
PUT /<target>/_doc/<_id>
// 无则插入,有则覆盖
POST /<target>/_doc/<_id>
// 无则插入,有则报错
PUT /<target>/_create/<_id>
// 无则插入,有则报错
POST /<target>/_create/<_id>

不指定id

// 正常插入
POST /<target>/_doc
// 报错
POST /<target>/_create
// 报错
PUT /<target>/_create
// 报错
PUT /<target>/_doc
PUT user/_doc/5
{
  "name": "张三(5)",
  "age": 10,
  "email": "1.qq.com",
  "address": "北京朝阳"
}

删除文档

// 根据 id 删除
DELETE /<index>/_doc/<_id>
// 根据查询删除
POST /<target>/_delete_by_query

删除 id 为1的数据

DELETE user/_doc/1

删除全部数据

POST user/_delete_by_query
{
  "query": {
    "match_all": {}
  }
}

更新文档

// 根据 id 更新
POST /<index>/_update/<_id>
// 根据查询更新
POST /<target>/_update_by_query

将 id 为1的数据的 name 修改为张三(修改后)

POST user/_update/1
{
  "doc": {
    "name": "张三(修改后)"
  }
}

将 id 为1,2的数据 age 修改为70

POST user/_update_by_query
{
  "query": {
    "ids": {
      "values": [1, 2]
    }
  },
  "script": {
    "source": "ctx._source.age = 70"
  }
}

索引重建(reindex)

索引在使用一段时间后,如果想修改索引的静态设置,比如主分片的数目,分词器等(这些设置无法直接修改),此时就可以使用索引重建

POST _reindex
{
  "source": {
    "index": "my-index-000001"
  },
  "dest": {
    "index": "my-new-index-000001"
  }
}

并发控制

当进行并发控制时通常有乐观锁和悲观锁两种方式:

乐观锁:适用于读多写少的情况,冲突比较少,可以提高系统的吞吐量
悲观锁:适用于读少写多的情况,经常会产生冲突,如果使用乐观锁,应用会不断的重试,会降低性能

ElasticSearch 使用乐观锁的形式来进行并发控制,即 if_primary_term 参数和 if_seq_no 参数

参数

作用

if_primary_term

数据在哪个分片

if_seq_no

版本号,每次修改都会增加

POST user/_doc/5
{
  "name": "张三(5)",
  "age": 10,
  "email": "1.qq.com",
  "address": "北京朝阳"
}
{
  "_index" : "user",
  "_id" : "5",
  "_version" : 12,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 2,
    "failed" : 0
  },
  "_seq_no" : 38,
  "_primary_term" : 2
}
GET user/_doc/5
{
  "_index" : "user",
  "_id" : "5",
  "_version" : 12,
  "_seq_no" : 38,
  "_primary_term" : 2,
  "found" : true,
  "_source" : {
    "name" : "张三(5)",
    "age" : 10,
    "email" : "1.qq.com",
    "address" : "北京朝阳"
  }
}

当 _seq_no=38 时,执行如下请求报错,加if_seq_no改为38时正常执行

POST user/_doc/5?if_primary_term=2&if_seq_no=30
{
  "name": "张三(5)",
  "age": 10,
  "email": "1.qq.com",
  "address": "北京朝阳"
}

创建,更新,删除文档等操作的 api 都可以使用这2个参数

批量操作

批量操作对json有严格的要求,每个json串不能换行,只能放在同一行,相邻的json串之间必须要有换行。每个操作必须是一对json串(delete语法除外)

{ action: { metadata }}
{ request body        }
{ action: { metadata }}
{ request body        }

操作类型

介绍

create

文档id不存在则创建,不存在则报错

index

文档id不存在则创建,存在则更新文档

update

根据文档id更新文档,不存在则返回错误

delete

根据文档id删除文档,不存在则返回错误

批量新增

{"index": {"_id": 1}}
{"name": "张三", "age": 10, "email": "1.qq.com", "address": "北京朝阳"}
{"index": {"_id": 2}}
{"name": "李四", "age": 20, "email": "2.qq.com", "address": "北京西城"}
{"index": {"_id": 3}}
{"name": "王五", "age": 30, "email": "3.qq.com", "address": "北京东城"}
{"index": {"_id": 4}}
{"name": "赵六", "age": 40, "email": "4.qq.com", "address": "北京海淀"}

文档写入

单个文档

ElasticSearch 文档操作_数据_02


多个文档

ElasticSearch 文档操作_大数据_03

ElasticSearch 文档操作_elasticsearch_04

文档查询

ElasticSearch 文档操作_jenkins_05

参考博客

官方文档
[0]https://www.elastic.co/guide/en/elasticsearch/reference/8.11/docs.html
[2]https://cloud.tencent.com/developer/article/2133017
大佬博客 插入方式的区别
[4]https://www.modb.pro/db/1717735427791724544


标签:index,name,文档,user,操作,ElasticSearch,POST,id
From: https://blog.51cto.com/u_15651175/9067671

相关文章

  • ElasticSearch 文本分析
    文本分析的原理分析器类别类别名介绍StandardAnalyzerstandard标准分析器,按照Unicode文本分割算法切分单词,删除大多数标点符号并将单词转为小写形式,支持过滤停用词SimpleAnalyzersimple简单分析器,在非字母的地方把单词切分开并将单词转为小写形式WhitespaceAnalyzerwhitespac......
  • ElasticSearch 搜索数据
    精确查询存在查询Existsquery用于查询某个字段不为空的数据。如下所示,查询age不为空的数据POSTuser/_search{"query":{"exists":{"field":"age"}}}主键查询通过_id字段查询数据POSTuser/_search{"query":{"ids"......
  • 【C++】STL 容器 - priority_queue 优先级队列容器 ( 容器简介 | 容器操作性能分析 |
    文章目录一、priority_queue优先级队列容器1、priority_queue优先级队列容器简介2、priority_queue优先级队列容器操作性能分析二、代码示例-priority_queue优先级队列容器1、默认优先级队列容器2、最大值优先级队列3、最小值优先级队列一、priority_queue优先级队列容器......
  • 【C++】STL 容器 - list 双向链表容器 ① ( 容器特点 | 容器操作时间复杂度 | 构造函
    文章目录一、list双向链表容器简介1、容器特点2、容器操作时间复杂度3、遍历访问5、头文件二、list双向链表容器构造函数1、默认无参构造函数2、创建包含n个相同元素的list双向链表3、使用初始化列表构造list双向链表4、使用另外一个list容器构造list双向链表容器......
  • 【操作系统】简单了解一下宏内核和微内核
    内核有哪些组成部分?宏内核和微内核的区别是什么?内核分层的目的是什么?计算机中资源主要包括软件资源和硬件资源,软件资源可以理解为各种各样的数据,那么硬件资源就是计算器的实际组成部分,主要可以分为下面这些部分:总线,负责连接其他设备,它是设备工作的基础CPU,中央处理器,负责执行程序和......
  • 【数据库】浅析DDL的基础操作
    本文的主要围绕着下面这些问题展开的,在阅读之前可以先自己思考一下问题的答案是什么定义数据库和数据表的语法是什么?定义数据表时,都有哪些约束?设计数据库时,有哪些需要注意的点?定义数据库的结构和数据表的结构主要使用数据库的DDL语言,DDL的全称是DataDefinitionLanguage,中文是数据......
  • VS Code | 你知道VS Code还有命令行操作吗?
    弱弱的问一句,有多少人知道VSCode还有个命令行操作???反正我是今天才发现,VSCode还有个命令行操作,真的是涨见识了~安装Windows系统下,用户在安装应用,并且重启系统之后,就可以在命令行使用code或者code-insiders了。macOS系统下,安装完成以后,打开命令面板,搜索Shell命令:在PATH中安装“Code......
  • 智能安防视频平台LiteCVR监控视频流的分享操作
    GB28181协议旨在建立一个统一的视频监控系统标准,使不同厂家的设备能够互相兼容和互通。它定义了视频监控设备之间的通信接口和协议,包括视频流传输、设备控制、事件通知等。并且,GB28181协议采用分布式部署的架构,支持多个视频监控设备之间的实时通信和数据交换。使用该协议,可以实现视......
  • 打造完备数据生态,「开放互信、合作共赢」: 拓数派亮相2023龙蜥操作系统大会
    拓数派始终持「开放互信,合作共赢」的理念,通过积极建立合作伙伴生态网络、构建生态工具、打造活跃的技术和用户社区等方式,构筑更加完善的数据生态体系,为用户带来更加便捷的使用体验。2023年12月17-18日,由开放原子开源基金会指导,龙蜥社区主办的2023龙蜥操作系统大会于北京嘉瑞文化中......
  • 浏览器文档对象模型是如何生成的
    从网络传给渲染引擎的HTML文件字节流是无法直接被渲染引擎理解的,所以要将其转化为渲染引擎能够理解的内部结构,这个结构就是DOM。DOM提供了对HTML文档结构化的表述。在渲染引擎中,DOM有三个层面的作用。从页面的视角来看,DOM是生成页面的基础数据结构。从JavaScript脚本视角......