首页 > 其他分享 >ElasticSearch的常规增删改查操作

ElasticSearch的常规增删改查操作

时间:2023-09-08 10:13:04浏览次数:33  
标签:name doc 改查 ElasticSearch user 增删 文档 POST id

一、Restful简介

RESTFul:Representational State Transfer,中文意思:表现层状态转化。变现层指的是资源的表现层,这里的资源是指网络上的信息,比如一张图片,一段文本,一步电影,那么每个资源在网络上都有一个标识,可以理解为一个ID,每个资源都有一个ID去表示它,这个ID就称之为URL。当我们给了这个资源一个地址后,比如我们经常说的URL,我们就能访问这个资源。

表现层状态转化:

我们平时访问一个网站,其实就是客户端和服务端的一种互动过程,有了互动,这个数据的状态肯定会发生改变。Elasticsearch默认走的是http协议,而http协议它是一种无状态的协议,无状态就是指服务端它不会记录客户端的所有信息和操作,客户端必须每次带上自己的状态去请求服务器。因此,如果客户端想要操作这个服务器,必须通过某些手段,才能让服务器发生状态转化。而这种转化是建立在表现层之上的,所以说这就表现层的状态转化。

转化手段:

  1. GET:用来获取资源
  2. POST:用来创建资源(也可以用来更新资源)
  3. PUT:用来更新资源
  4. DELETE:用来删除资源

我们对ES的所有操作,都被封装成了RestAPI,所以我们只要发送请求就行了。

二、查看ES的基本信息

查看所有结点:

GET _cat/nodes

查看ES健康状况

GET _cat/health
  • Green:主分片与副本都正常分配
  • Yellow:主分片全部正常分配,有副本分片未能正常分配
  • Red:有主分片未能分配

查看主节点:

GET _cat/master

查看所有索引(类似于show databases)

GET _cat/indices

三、索引操作

3.1 创建索引

创建并显示指定索引字段的类型

创建名为user的索引与对应映射信息。

PUT /user
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "address": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      "remark": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      },
      "age": {
        "type": "long"
      },
      "salary": {
        "type": "double"
      },
      "birthDate": {
        "type": "date",
        "format": "yyyy-MM-dd"
      }
    }
  }
}

3.2 创建文档映射

通过创建文档的方式自动映射字段的类型,当索引不存在的时候会自动创建并且字段类型自动根据值进行映射。

格式:PUT /索引名/类型名/文档id

以前的写法是:{index}/{type}/{id},例如:user/_doc/1

现在的写法是:{index}/_doc/{id},例如:user/_doc/1

由于在ES7中将type概念移除了,所以现在建议直接写成_doc,当然你硬要指定type类型也行,只是ES是给出一个警告:#! [types removal] Specifying types in document index requests is deprecated, use the typeless endpoints instead (/{index}/_doc/{id}, /{index}/_doc, or /{index}/_create/{id}).

PUT /user/_doc/1
{
  "name":"小白学es",
  "age":3
}

如果索引原本中没有的字段,这是也会自动加上并且映射类型,比如之前是没有sex字段的:

PUT /user/_doc/1
{
  "name":"小白学es",
  "age":18,
  "sex":"男"
}

3.3 查看索引

GET /user

3.4 删除索引

DELETE /user

四、文档操作

4.1 增加文档信息

在索引 user 中增加一条文档信息。如果不指定ID,那么ES会自动生成ID

POST /user/_doc
{
  "name": "张三",
  "age": 29,
  "salary": 100,
  "address": "北京市",
  "remark": "来自中国北京市的张先生",
  "birthDate": "1990-01-10"
}

image

增加文档时指定ID:

POST /user/_doc/1
{
    "name": "张三",
    "age": 29,
    "salary": 100,
    "address": "北京市",
    "remark": "来自中国北京市的张先生",
    "birthDate": "1990-01-10"
}

4.2 更新文档信息

更新文档信息可以使用PUT和POST来请求,TODO 待确认? PUT修改:全量字段更新,而POST 修改:指定字段更新(推荐使用)

使用PUT方式更新之前创建的 id=1 的文档信息。

PUT /user/_doc/1
{
  "name": "李四"
}

可以发现这里只更新了name字段,没有更新其它的字段,所以其它字段默认会填充空值。

image

使用POST请求修改文档:

首先将没个字段的值都初始化

POST /user/_doc/1
{
    "name": "张三",
    "age": 29,
    "salary": 100,
    "address": "北京市",
    "remark": "来自中国北京市的张先生",
    "birthDate": "1990-01-10"
}

然后再用POST请求执行修改文档操作:

POST方式第一种更新:

POST /user/_update/1/
{
  "doc": {
    "name": "王五"
  }
}

第一次结果:

"_version": 5,
"result": "updated"

第二次结果:

"_version": 5,
"result": "noop"

使用这种更新操作进行重复更新时,若数据与原先一致,则不进行任何操作。返回的结果是:"result": "noop",而不是"result" : "updated"

POST方式第二种更新:

POST /user/_doc/1
{
    "name":"赵六"
}

第一次结果:

"_version": 6,
"result": "updated"

第二次结果:

"_version": 7,
"result": "updated"

使用第二种更新操作时(即不带_update),无论是否重复更新,数据是否一致,都会进行更新,version版本相应增加。因此若使用PUT方式,结果也一致。

4.3 获取文档信息

获取 user的索引 id=1 的文档信息。

GET /user/_doc/1

[4.4]、删除文档信息

删除之前创建的 id=1 的文档信息。

DELETE /user/_doc/1

五、批量操作

有些情况下可以通过批量操作以减少网络请求。如:批量查询、批量插入数据等。

5.1 批量查询

POST user/_mget
{
  "ids" : [ "1", "mT245YABxusAxYeD-gUz" ]
}

注:POST user/_doc/_mget 类型没写则重写默认的类型,即_doc,如果写了ES会给一个系统警告,不过不影响结果

image

在Elasticsearch中,支持批量的插入、修改、删除操作,都是通过_bulk的api完成的。
请求格式如下:

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

注意:请求格式不同寻常,必须按照这种指定格式,如果不小心换行了,那么不好意思,执行报错。

5.2 单条插入数据

POST user/_doc
{"name":"周八","address":"广东省广州市花都区","remark":"公司底层码农员工","age":32,"salary":5000,"birthDate":"1987-09-26"}

5.3 批量插入数据

POST _bulk
{"create":{"_index":"user","_id":2001}}
{"name":"刘一","address":"广东省广州市花都区","remark":"公司底层码农员工","age":30,"salary":3000,"birthDate":"1989-11-11"}
{"create":{"_index":"user","_id":2002}}
{"name":"陈二","address":"广东省广州市花都区","remark":"公司底层码农员工","age":27,"salary":7900,"birthDate":"1992-01-25"}
{"create":{"_index":"user","_id":2003}}
{"name":"张三","address":"广东省广州市花都区","remark":"公司底层码农员工","age":28,"salary":8800,"birthDate":"1991-10-05"}
{"create":{"_index":"user","_id":2004}}
{"name":"李四","address":"广东省广州市花都区","remark":"公司底层码农员工","age":26,"salary":9000,"birthDate":"1993-08-18"}
{"create":{"_index":"user","_id":2005}}
{"name":"王五","address":"广东省广州市花都区","remark":"公司底层码农员工","age":31,"salary":4800,"birthDate":"1988-07-20"}

如果必须指定不好去掉配置就好了。

5.4 批量删除

POST _bulk
{"delete":{"_index":"user","_id":2001}}
{"delete":{"_index":"user","_id":2002}}
{"delete":{"_index":"user","_id":2003}}

六、简单的查询数据

查询所有文档信息

GET /user/_search

根据关键字查询文档信息,注意:text类型可以根据字段分词搜索,keyword关键词不会处理分词器

GET /user/_search?q=name:张三

标签:name,doc,改查,ElasticSearch,user,增删,文档,POST,id
From: https://www.cnblogs.com/ciel717/p/17657104.html

相关文章

  • ElasticSearch系列——查询、Python使用、Django/Flask集成、集群搭建,数据分片、位置
    @目录Elasticsearch之-查询一基本查询1.1match查询1.2term查询1.3terms查询1.4控制查询的返回数量(分页)1.5match_all查询1.6match_phrase查询1.7multi_match1.8指定返回的字段1.9sort结果排序1.10range范围查询1.11wildcard查询二组合查询2.1bool查询2.2简单过滤......
  • MySQL增删改查的基本命令
    1.数据库相关命令1.查看所有的数据库showdatabases;2.查看一个库的基本信息showcreatedatabasedb1;3.创建一个数据库createdatabasedb1;4.删除一个数据库dropdatabasedb1;5.修改库的字符编码alterdatabasecharset='utf8';2.表相关命令1.创建......
  • Elasticsearch环境搭建
    一、安装elasticsearch--拉取镜像dockerpulldocker.elastic.co/elasticsearch/elasticsearch:8.9.1--创建docker网络dockernetworkcreateelastic--启动容器,-m设置内存大小dockerrun--namees01--netelastic-p9200:9200-p9300:9300-it-m1GBdoc......
  • Elasticsearch7.8集群实践记录之下线节点
    1.背景:由于机房迁移需要将elasticsearch集群进行跨机房搬迁,采取先扩容再收缩的方式进行,已有效减小对业务环境的影响。当前需要将老的节点有序下线。2.操作步骤:  1.检查集群配置,保证主节点的可用性;   #设置minimum_master_nodes为2curl-XPUT'http://hostname:9......
  • Elasticsearch7.8集群实践记录
    1.背景:当需要开发团队搭建自有elasticsearch集群时候,需要先明确具体的应用场景,进而对可用性,性能以及容量进行评估。当前实践记录主要应用场景在于业务日志记录短暂保存以便提供近期数据查询,并选择elasticsearch版本7.8.0,可用性要求三个9,每日数据量月1.5T,数据保存大约1周;2.配置项......
  • Elasticsearch
    ES(分布式、开源、查询)传统数据一般会分三个方向:结构化数据、非结构化数据、半结构化数据结构化数据:一般每个字段之间都是有关系的,例如mysql的主键唯一id代表了该条数据的唯一定位(mysql、mongodb)非结构化数据:无法用二维表结构来设计,文章、日志、视频、图片等等(mongodb、redis)......
  • Elasticsearch系列
    Elasticsearch介绍Elasticsearch系列之-linux.docker安装和基础操作Elasticsearch系列之-windows安装和基础操作Elasticsearch系列之-查询......
  • 喜讯!极限科技再次中标中国移动云 Elasticsearch 自研版技术开发服务项目!
    喜讯!极限科技再次中标中国移动云Elasticsearch自研版技术开发服务项目!近日,极限科技再次成功中标中国移动苏州研发中心《云能力中心2023—2024年移动云Elasticsearch自研版技术开发服务项目》。实现了个性化搜索及聚合分析,更稳定可靠地支持万亿级数据规模,为移动云系统提供......
  • 喜讯!极限科技再次中标中国移动云 Elasticsearch 自研版技术开发服务项目!
    喜讯!极限科技再次中标中国移动云Elasticsearch自研版技术开发服务项目!近日,极限科技再次成功中标中国移动苏州研发中心《云能力中心2023—2024年移动云Elasticsearch自研版技术开发服务项目》。实现了个性化搜索及聚合分析,更稳定可靠地支持万亿级数据规模,为移动云系统提......
  • elasticsearch wildcard 慢查询原因分析(深入到源码!!!)
    大家好,我是蓝胖子,前段时间线上elasticsearch集群遇到多次wildcard产生的性能问题,elasticsearchwildcard一直是容易引发elasticsearch容易宕机的一个风险点,但究竟它为何消耗cpu呢?又该如何理解elasticsearchprofileapi的返回结果呢?在探索了部分源码后,我将在这篇文章一一揭......