Elasticsearch的Restful风格API

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

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":"嗨,哥们,上号!"
 }

致谢

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

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

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李学不完

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值