Elasticsearch的Restful风格API

news2024/11/14 21:35:59

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

1、Restful及JSON格式

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP可以使用 XML 格式定义或 JSON 格式定义。REST(英文:Representational State Tranfer,简称REST)描述了一个架构样式的网络系统,比如web应用程序

JSON格式:

数据类型描述举例
字符串要求使用双引号("")引起来的数据"elasticsearch"
数字通常指的是0-9的所有数字100
布尔值只有true和false两个值true
空值只有null一个值null
数组使用一对中括号("[]")放入不同的元素(支持高级数据和基础数据类型)["linux","docker"]
对象使用一对大括号("{}")括起来,里面的数据使用KEY-VALUE键值对即可{"class":"linux","age":25}

2、Elasticsearch的相关术语

  • Document文档,是用户存储在ES的一些数据,它是ES中最小的存储单元
  • field:相当于数据库表的字段,对文档数据根据不同属性进行分类标示
  • index索引;一个索引就是一个拥有相似特征文档的集合
  • shard分片;真正存储数据的地方,每个分片底层对应的是一个Lucene库。一个索引至少有1个或多个分片
  • replica副本;对数据的备份,一个分片可以有0个或多个副本。一旦副本数量不为0,就会引入主分片(primary shard)和副本分片(replica shard)的概念
    • 主分片(primary shard):可以实现对数据的读写操作

    • 副本分片(replica shard):可以实现数据读操作,与此同时,需要去主分片同步数据,当主分片挂掉,副本分片会变为主分片

  • Allocation分配;将分片(shard)分配给某个节点的过程,包括主分片与副本分片;如果是副本分片,它还包含主分片复制数据的过程,这个分配过程由master节点调度完成
  • Type:在es 5.x即更早的版本,在一个索引中,我们可以定义一种或多种数据类型。但在es7仅支持"_doc"类型。

3、管理索引的API

3.1、查看索引信息

 GET http://192.168.1.10:9200/_cat/indices   # 查看全部的索引信息
 GET http://192.168.1.10:9200/_cat/indices?v # 查看表头信息
 GET http://192.168.1.10:9200/_cat/indices/.kibana_7.17.3_001?v  # 查看单个索引 
 GET http://192.168.1.10:9200/.kibana_7.17.3_001 # 查看单个索引的详细信息

3.2、创建索引

 # 创建索引并指定分片和副本
 PUT http://192.168.1.10:9200/cluster-linux2
  {
     "settings":{
         "index":{
             "number_of_shards": "3",
             "number_of_replicas": 0
         }
     }
 }
 # 参数说明
 "number_of_shards": 指定分片数量
 "number_of_replicas": 指定副本数量

3.3、修改索引

 PUT http://192.168.1.10:9200/cluster-linux/_settings
 {
     "number_of_replicas": 0
 }
 # 注意:分片数量无法修改,副本数量是可以修改的

3.4、删除索引

 DELETE http://192.168.1.10:9200/cluster-linux
 # 删除索引,服务器的数据也会随之删除

3.5、索引别名

 POST http://192.168.1.10:9200/_aliases      # 添加索引别名
 {
     "actions": [
         {
             "add": {
                 "index": "cluster-linux",
                 "alias": "2024"
             }
         },
         {
             "add": {
                 "index": "cluster-linux1",
                 "alias": "23世纪"
             }
         }
     ]
 }
 GET http://192.168.1.10:9200/_aliases       # 查看所有索引的别名
 POST http://192.168.1.10:9200/_aliases      # 删除索引
 {
     "actions": [
         {
             "remove": {
                 "index": "cluster-linux",
                 "alias": "2024"
             }
         }
     ]
 }
 POST http://192.168.1.10:9200/_aliases      # 修改索引别名
 {
     "actions": [
         {
             "remove": {
                 "index": "cluster-linux",
                 "alias": "2024"
             }
         },
         {
             "add": {
                 "index": "cluster-linux",
                 "alias": "23世纪"
             }
         }
     ]
 }

3.6、索引关闭

索引关闭意味着无法进行任何的读写操作,但数据并不会被删除;

 POST http://192.168.1.10:9200/cluster-linux/_close  # 关闭索引
 POST http://192.168.1.10:9200/cluster-*/_close      # 基于通配符关闭索引

3.7、索引打开

 POST http://192.168.1.10:9200/cluster-linux/_open   # 打开索引
 POST http://192.168.1.10:9200/cluster-*/_open       # 基于通配符打开索引

4、管理文档的API

4.1、文档的创建

 # 创建文档
 POST http://192.168.1.10:9200/teacher/_doc
 {
     "name":"cluster",
     "hobby":[
         "Linux",
         "Docker"
     ]
 }
 # 创建文档并指定id
 http://192.168.1.10:9200/teacher/_doc/1001
 ​
 # 文档类型
 http://192.168.1.10:9200/student/linux/1001
 http://192.168.1.10:9200/student/_doc/1002

4.2、文档的查看

源数据:指的是用户写入的数据

元数据:描述数据的数据,由ES内部维护

 GET http://192.168.1.10:9200/teacher/_search    #查看所有文档 
 GET http://192.168.1.10:9200/teacher/_doc/LQSMhJEBbNOjcNtbiy97  # 查看某一个文档
 HEAD http://192.168.1.10:9200/teacher/_doc/LQSMhJEBbNOjcNtbiy97 # 判断一个文档是否存在,返回200、404

4.3、文档的修改

 # 全局更新,会覆盖原有的文档数据内容
 POST http://192.168.1.10:9200/teacher/_doc/LQSMhJEBbNOjcNtbiy97 
 {
     "name":"cluster",
     "hobby":[
         "Linux",
         "Docker",
         "Java"
     ]
 }
 ​
 # 局部更新,并不会覆盖原有的文档数据内容
 POST http://192.168.1.10:9200/teacher/_doc/LQSMhJEBbNOjcNtbiy97/_update
 {
     "doc": {
         "name": "小李"
         "age": 22
     }
 }

4.4、文档的删除

 DELETE http://192.168.1.10:9200/teacher/_doc/1001

4.5、文档的批量操作

 # 批量创建
 POST http://192.168.1.10:9200/_bulk
 {"create":{"_index":"cluster-linux-elk"}}
 {"name":"user1","hobby":["u1xx1","u1xx2"]}
 {"create":{"_index":"cluster-linux-elk","_id": 1002}}
 {"name":"user2","hobby":["u2xx1","u2xx2"]}
 {"create":{"_index":"cluster-linux-elk","_id": 1001}}}
 {"name":"user3","hobby":["u3xx1","u3xx2"]}
 ​
 # 批量删除
 POST http://192.168.1.10:9200/_bulk
 {"delete":{"_index":"cluster-linux-elk","_id": "1001" }}
 {"delete":{"_index":"cluster-linux-elk","_id": "1002" }}
 ​
 # 批量修改
 POST http://192.168.1.10:9200/_bulk
 {"update":{"_id":"1001","_index": "cluster-linux-elk" }}
 {"doc":{"name":"更改1"}}
 {"update":{"_id":"1002","_index": "cluster-linux-elk" }}
 {"doc":{"name":"更改2"}}
 ​
 # 批量查看
 POST http://192.168.1.10:9200/_mget
 {
     "docs": [
         {
             "_index": "cluster-linux-elk",
             "_id": "1001"
         },
         {
             "_index": "cluster-linux-elk",
             "_id": "1002"
         }
     ]
 }

5、使用映射(mapping)自定义数据类型

 https://www.elastic.co/guide/en/elasticsearch/reference/7.17/mapping.html

映射定义文档及其包含的字段如何存储和索引的过程

每个文档都是字段的集合,每个字段都有自己的数据类型。映射数据时,我们创建一个映射定义,其中包含与文档相关的字段列表。映射定义还包括元数据字段,例如_source自定义 如何处理文档的关联元数据的字段。

使用动态映射显式映射来定义数据。每种方法 根据您在数据旅程中所处的位置提供不同的优势。为 例如,显式映射您不想使用默认值的字段,或者将字段映射到 更好地控制创建的字段。然后,您可以允许 Elasticsearch 动态添加其他字段。

5.1、IP案例

 # 创建索引时指定映射关系
 PUT http://192.168.1.10:9200/cluster-linux-elk      
 {
     "mappings":{
         "properties":{
             "ip_addr":{
                 "type":"ip"
             }
         }
     }
 }
 ​
 #查看索引时指定映射关系
 GET http://192.168.1.10:9200/cluster-linux-elk
 ​
 # 查看IP的网段
 GET http://192.168.1.10:9200/cluster-linux-elk/_search
 {
     "query":{
         "match":{
             "ip_addr":"192.168.0.0/16"
         }
     }
 }

5.2、其他数据案例

 # 创建索引
 PUT http://192.168.1.10:9200/cluster-linux-elk-2024
 # 修改索引的数据类型
 PUT http://192.168.1.10:9200/cluster-linux-elk-2024/_mapping
 {
     "properties": {
         "name": {
             "type": "text",
             "index": true
         },
         "gender": {
             "type": "keyword",
             "index": true
         },
         "telephone": {
             "type": "text",
             "index": false
         },
         "address": {
             "type": "keyword",
             "index": false
         },
         "email": {
             "type": "keyword"
         },
         "ip_addr": {
             "type": "ip"
         }
     }
 }
 # 添加测试数据
 {"create":{"_index":"cluster-linux-elk-2024"}}
 {"ip_addr":"192.168.10.10","name":"zhangsan","gender":"male","telephone":"123456","address":"xxx","email":"zhangsan@qq.com"}
 {"create":{"_index":"cluster-linux-elk-2024"}}
 {"ip_addr":"192.168.20.20","name":"lisi","gender":"male","telephone":"333333","address":"yyy","email":"lisi@qq.com"}
 {"create":{"_index":"cluster-linux-elk-2024"}}
 {"ip_addr":"172.28.30.101","name":"wangwu","gender":"female","telephone":"44444","address":"zzz","email":"wangwu@qq.com"}
 {"create":{"_index":"cluster-linux-elk-2024"}}
 {"ip_addr":"172.28.50.15","name":"zhaoliu","gender":"female","telephone":"55555","address":"ddd","email":"zhaoliu@qq.com"}
 {"create":{"_index":"cluster-linux-elk-2024"}}
 {"ip_addr":"10.0.0.67","name":"xiaoli","gender":"male","telephone":"66666","address":"aaa","email":"xiaoli@qq.com"}
 ​
 # 基于genders搜索
 FET http://192.168.1.10:9200/cluster-linux-elk-2024/_search
 {
     "query":{
         "match":{
             "gender":"female"
         }
     }
 }
 ​
 # 注意:type类型为keyword的查询时得一致,反之;index默认为true,代表可以查询,反之

6、中文分词器官

6.1、内置的标准分词器-分析英文

 # 标准分词器模式使用空格和符号进行切割分词的;
 GET http://192.168.1.10:9200/_analyze
 {
     "analyzer":"standard",
     "text":"My name is Zhangsan and I'm 18 years old !"
 }

6.2、内置的标准分词器-分析中文并不友好

 # 标准分词器模式使用单个汉字进行分隔;
 GET http://192.168.1.10:9200/_analyze
 {
     "analyzer":"standard",
     "text":"我爱北京天安门!"
 }

6.3、下载中文分词器

 https://github.com/medcl/elasticsearch-analysis-ik

安装IK分词器

 install -d /cluster/softwares/es/plugins/ik -o elsearch -g elsearch
 cd /cluster/softwares/es/plugins/ik
 unzip elasticsearch-analysis-ik-7.17.3.zip 
 rm -f elasticsearch-analysis-ik-7.17.3.zip
 chown -R elsearch:elsearch *

重启ES节点,使其加载插件;

 systemctl restart es

测试IK分词器

 # 细粒度拆分
 GET http://192.168.1.10:9200/_analyze
 {
     "analyzer":"ik_max_word",
     "text":"我爱北京天安门"
 }
 ​
 # 粗粒度拆分
 GET http://192.168.1.10:9200/_analyze
 {
     "analyzer":"ik_smart",
     "text":"我爱北京天安门"
 }

6.7、自定义字典

 # 进入到IK分词器的插件安装目录
 cd /cluster/softwares/es/plugins/ik/config
 ​
 # 自定义字典
 cat > cluster-linux.dic << 'EOF'
 上号
 EOF
 chown elsearch:elsearch cluster-linux.dic
 ​
 # 加载自定义字典
 vim IKAnalyzer.cfg.xml
 ..
 <entry key="ext_dict">cluster-linux.dic</entry>
 ​
 # 重启ES集群
 systemctl restart es
 ​
 # 测试分词器
 GET http://192.168.1.10:9200/_analyze
 {
     "analyzer":"ik_smart",
     "text":"嗨,哥们,上号!"
 }

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

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

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

相关文章

串行总线舵机

项目需求&#xff1a; 直接旋转&#xff1a;总体旋转角度方向 微调&#xff1a;步进模式/闭环电机模式 需要考虑受力之类的吗 初选方案&#xff1a; 只改写底层&#xff0c;然后引入官方驱动&#xff0c;通过各种函数 5、舵机如何实现在机械臂夹具中使用。 仅限夹取相同物…

开发台球助教小程序前景分析

开发台球助教小程序的前景分析可从以下维度展开探讨&#xff1a; 市场需求的增长 台球作为一项受欢迎的休闲运动&#xff0c;其爱好者群体正在扩大。随着大众对这项运动兴趣的增加&#xff0c;寻求系统化培训的需求也愈发明显。台球助教小程序正好填补了这一市场空白&#xf…

学习大数据DAY49 考后练习题

前几天在考帆软&#xff0c;考完后还有周末大礼包。 Oracle 上机练习 --第一题 create table 客户交易情况 ( 客户号 varchar2(5), 交易时间 varchar2(20),交易金额 number(5) ); --表中内容手动录入 select dense_rank()over(order by ascii(客户号)) as 序号 1,客户号, den…

MySQL插入更新死锁问题解析

文章目录 1 问题背景2 线上问题2.1 线上异常日志2.2 数据准备2.3 问题复现2.3.1 执行流程2.3.2 死锁排查 2.3.3 死锁日志分析2.3.3.1 事务A23087信息2.3.3.2 事务23087持有锁2.3.3.3 事务23087等待锁2.3.3.4 事务23088信息2.3.3.5 事务23088持有锁2.3.3.6 事务23088等待锁 3 分…

python进阶篇-day05-网络编程(TCP)与进程

day05网络编程 一. 网编三要素 ip 概述 设备(电脑, 手机, IPad, 耳机...)在网络中的唯一标识. 分类 按照 代数 划分: IPv4: 4字节, 十进制来表示, 例如: 192.168.13.157 IPv6: 8字节, 十六进制来表示, 理论上来讲, 可以让地球上的每一粒沙子都有自己的IP. Ipv4 常用类别划…

同三维S61-20SDI 20倍 HDMI SDI USB3.0 网口 3高清摄像机

同三维S61-20SDI 高清摄像机 20倍光学变焦&#xff0c; HDMI/SDI/USB3.0/网口&#xff0c;3.5音频口输入&#xff0c;350万像素 索尼机芯&#xff0c;支持POE&#xff0c;NDI HX2/Full NDI&#xff08;可定制&#xff09; 两款&#xff1a; S61-20SDI (不支持NDI) 单价&#…

1分钟 快速掌握 双向信号(inout信号)

​在数字电路设计中&#xff0c;三态门扮演着至关重要的角色。它是Verilog硬件描述语言中的一个基本元素&#xff0c;用于实现复杂电路的设计与模拟。 今天&#xff0c;我们一起来探讨三态门的基本原理、在Verilog中的实现方式。 一、什么是三态门? 三态门&#xff0c;简单…

fpga图像处理实战-边缘检测 (Roberts算子)

Roberts算子 Roberts算子是一种用于边缘检测的算子,主要用于图像处理中检测图像的边缘。它是最早的边缘检测算法之一,以其计算简单、速度快而著称。Roberts算子通过计算图像像素在对角方向的梯度来检测边缘,从而突出图像中灰度变化最剧烈的部分。 原理 Roberts算子通过…

力扣刷题(4)

正则表达式匹配 正则表达式匹配-力扣 思路来源&#xff1a;ithewei 若 *p 为空&#xff0c;*s 为空则匹配&#xff0c;*s 为非空则不匹配&#xff1b;当 *s为非空时&#xff0c;*p *s || *p ‘.’ 时第一个字符匹配&#xff1b;若 *(p1) ! ’ * 时&#xff0c;则递归判断…

python开发VTK入门

首先用pip命令安装VTK的python库&#xff1b; 需要一些时间&#xff0c;安装完成如下&#xff1b; 基本示例代码&#xff0c; import vtkcube vtk.vtkCubeSource() cube.SetXLength(100.0) cube.SetYLength(200.0) cube.SetZLength(300.0)mapper vtk.vtkPolyDataMapper() ma…

25届计算机毕业设计:3步打造北部湾助农平台,Java SpringBoot实践

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

《OpenCV计算机视觉》—— 图像轮廓检测与绘制

文章目录 一、轮廓的检测二、轮廓的绘制图像轮廓检测与绘制的代码实现 三、轮廓的近似 一、轮廓的检测 轮廓检测是指在包含目标和背景的数字图像中&#xff0c;忽略背景和目标内部的纹理以及噪声干扰的影响&#xff0c;采用一定的技术和方法来实现目标轮廓提取的过程注意:做轮…

探索Python中的Ellipsis:不仅仅是三个点

在Python 3.9中&#xff0c;Ellipsis 对象被赋予了一个新名称&#xff0c;即 ...&#xff0c;这使得它更容易输入和使用。这个变化是在Python 3.9版本中引入的&#xff0c;而不是3.1。这个变化的好处包括&#xff1a; 易用性&#xff1a;使用 ... 比输入 Ellipsis 更快&#xf…

第11讲 回环检测

1、理解回环检测的必要性 2、掌握基于词袋的外观式回环检测 3、通过DBoW3的实验&#xff0c;学习词袋模型的实际用途 1、概述 1.1 回环检测的意义 回环检测模块能够给出除了相邻帧的一些是个更加久远的约束。相机经过了同一个地方&#xff0c;采集了相似的数据。回环检测的关…

OpenCV 之图像平滑处理

引言 图像平滑处理&#xff08;也称为“模糊处理”&#xff09;是计算机视觉中一项非常基础的技术&#xff0c;常用于减少图像噪声或失真&#xff0c;提高图像质量。平滑处理可以通过各种滤波器实现&#xff0c;常见的滤波器包括均值滤波、方框滤波、高斯滤波和中值滤波。本文…

【赵渝强老师】大数据生态圈中的组件

大数据体系架构中的组件非常多&#xff0c;每个组件又属于不同的生态圈系统。从最早的Hadoop生态圈体系开始&#xff0c;逐步有了Spark生态圈体系和Flink生态圈体系。因此在学习大数据之前有必要了解一下每一个生态圈体系中具体包含哪些组件&#xff0c;以及它们的作用又是什么…

在移动应用程序中集成模糊方法的基于物联网的天气监测系统的实现

这篇论文的标题是《IMPLEMENTATION OF WEATHER MONITORING SYSTEM BASED INTERNET OF THINGS USING INTEGRATED FUZZY METHOD IN MOBILE APPLICATIONS》&#xff0c;作者是 Muhammad Malik Amin&#xff0c;来自 Politeknik Negeri Jakarta 的 D-IV INSTRUMENTASI DAN KONTROL …

WebAssembly内存结构学习记录

参考&#xff1a; 大文件上传深入研究&#xff1a;https://juejin.cn/post/6870837414852886542 WorkerWasm切片上传&#xff1a;https://juejin.cn/post/7221003401996091429 Wasm实现MD5文件编码&#xff1a;https://juejin.cn/post/7319541565318398003 SharedArrayBuffer与…

Python | 使用Pygments生成漂亮的代码段截图

在创建技术文档或教程时&#xff0c;包含代码段的图像以说明特定的示例或概念可能会有所帮助。但是&#xff0c;对代码文件进行屏幕截图可能看起来不专业&#xff0c;并且难以阅读。本文将探索如何使用库pygments将编程代码转换为Python中美丽的图像片段。 Pygments库 Pygmen…

基于Java+SpringBoot+Vue+MySQL的失物招领管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的失物招领管理系统【附源码文档】、前后…