一、Elasticsearch介绍与部署

news2024/11/25 4:28:20

目录

一、什么是Elasticsearch

二、安装Elasticsearch

三、配置es

四、启动es

1、下载安装elasticsearch的插件head

2、在浏览器,加载扩展程序

3、运行扩展程序

4、输入es地址就可以了

五、Elasticsearch 创建、查看、删除索引、创建、查看、修改、删除文档、映射关系

1、索引操作

        1.1、创建索引

1.2、查看指定索引

1.3、查看全部索引 _cat/indices?v

 1.4、删除索引

2、文档操作

2.1、创建文档

2.2、查询单个文档:主键id查询

2.3、查看所有文档:全量查询

2.4、修改文档中的全部字段

2.5、修改文档某一个字段

2.6、条件查询文档内容

2.7、分页查询和排序文档内容

2.8、多条件查询 and

2.9、多条件查询 or

2.10、多条件查询 :大于 小于

2.11、聚合查询 根据价格分组、对价格求平均值

3、映射操作

六、创建分片索引

七、故障转移

八、水平扩容


一、什么是Elasticsearch

        是一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索搜索、支持分布式可实现高可用、提供API接口,可以处理大规模日志数据,比如:Nginx 、Tomcat、系统日志等功能 。

bin 可执行脚本目录
config 配置目录
jdk 内置 JDK 目录(ES是采用Java语言开发的)
lib 类库
logs 日志目录
modules 模块目录
plugins 插件目录
解后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务。

二、安装Elasticsearch

1、下载es安装包
https://www.elastic.co/cn/downloads/past-releases#elasticsearch
2、使用rz命令上传至服务器别解压
3、使用tcp命令传值另外两个服务器
4、创建es用户
useradd elasticsearch
5、创建数据目录
[root@rabbitmq_2 es]# mkdir es_data
6、创建日志目录
[root@rabbitmq_2 es]# mkdir es_log
7、配置elasticsearch文件权限
chown -R elasticsearch:elasticsearch /home/es/elasticsearch-7.8.0
chown -R elasticsearch:elasticsearch /home/es/es_data
chown -R elasticsearch:elasticsearch /home/es/es_log
6、出现这个错误 max virtual memory areas vm.max_map_count [65530] is too low,
vim /etc/sysctl.conf
添加这个,保存退出,刷新
vm.max_map_count=262144
[root@rabbitmq_2 es]# sysctl -p
vm.max_map_count = 262144
8、这个错误 max file descriptors [4096] for elasticsearch process is too low
vim /etc/security/limits.conf
# End of file
elasticsearch soft nofile 65535
elasticsearch hard nofile 65535
保存退出

三、配置es

[elasticsearch@rabbitmq_1 config]$ vim elasticsearch.yml
cluster.name: my-application   
node.name: node-1
node.master: true   //当前节点可以是master节点、也可以是数据节点
node.data: true
path.data: /home/es/es_data
path.logs: /home/es/es_log
network.host: 0.0.0.0
http.port: 9200
//用来查找集群节点的模块
discovery.seed_hosts: ["192.168.134.132", "192.168.134.133"]
// 集群内可以被选为主节点的节点列表
cluster.initial_master_nodes: ["node-1"]
//跨域配置
http.cors.enabled: true
http.cros.allow-origin: "*"
如果是ES集群的话,只需要把边配置文件scp到其他节点即可
[elasticsearch@rabbitmq_1 config]$ vim elasticsearch.yml
cluster.name: my-application   
node.name: node-2
node.master: true   //当前节点可以是master节点、也可以是数据节点
node.data: true
path.data: /home/es/es_data
path.logs: /home/es/es_log
network.host: 0.0.0.0
http.port: 9200
//用来查找集群节点的模块,节点发现,有几个机器就写几个
discovery.seed_hosts: ["192.168.134.132", "192.168.134.133"]
// 集群内可以被选为主节点的节点列表
cluster.initial_master_nodes: ["node-1"]
//跨域配置
http.cors.enabled: true
http.cros.allow-origin: "*"

四、启动es

因为安全问题,es不允许使用root 启动,所以需要创建es用户
useradd elasticsearch //创建用户
passwd 123456   //设置密码
//授权
chown -R elasticsearch:elasticsearch /path/to/elasticsearch
//切换用户
su - elasticsearch

[root@rabbitmq_2 bin]# sudo -u elasticsearch ./elasticsearch
[elasticsearch@rabbitmq_1 bin]$ ./elasticsearch
后台启动 街上 -d
有这一行表示启动成功
[node-1] Active license is now [BASIC]; Security is disabled
[elasticsearch@rabbitmq_1 bin]$ ./elasticsearch -d
然后去浏览器查看
http://192.168.134.132:9200/
{
  "name" : "node-1",
  "cluster_name" : "my-application",
  "cluster_uuid" : "VI1zyRs3TRu3MDBGxrPh5w",
  "version" : {
    "number" : "7.8.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
    "build_date" : "2020-06-14T19:35:50.234439Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
监控elasticsearch集群服务器的健康性
用curl命令对集群的健康性状态进行检查,如果返回值是green,说明正常,是yellow,说明是副本的分片丢失,如果是red,表示主片丢失。
[elasticsearch@rabbitmq_1 es_data]$ curl -sXGET http://192.168.134.132:9200/_cluster/health?pretty=true
{
  "cluster_name" : "my-application",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

1、下载安装elasticsearch的插件head

地址:https://github.com/mobz/elasticsearch-head/raw/master/crx/es-head.crx

将下载好的es-head.crx 改为 es-head.rar,然后解压,解压后的目录

2、在浏览器,加载扩展程序

3、运行扩展程序

 

 

4、输入es地址就可以了

 

五、Elasticsearch 创建、查看、删除索引、创建、查看、修改、删除文档、映射关系

        Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比。

        ES 里的 Index 可以看做一个库,而 Types 相当于表,Documents 则相当于表的行。这里 Types 的概念已经被逐渐弱化,Elasticsearch 6.X 中,一个 index 下已经只能包含一个 type,Elasticsearch 7.X 中, Type 的概念已经被删除了。

索引的精髓:一切设计为了提高搜索性能

1、索引操作

        1.1、创建索引

        在ES中创建一个索引,就相当于在mysql中创建了一个数据库,而mysql中的数据库肯定是不能重复的,也即ES中的索引也不能重复,所以这是一个幂等性操作,需要发送PUT请求(如果重复发送PUT请求、重复添加索引,会返回错误信息),这里不能发送POST请求。

1.2、查看指定索引

        在postman中,向ES服务器发送GET请求。这里的路径和上边的创建索引是一样的,只是请求方式不一样

1.3、查看全部索引 _cat/indices?v

 

在 Postman 中,向 ES 服务器发 GET 请求。
http://192.168.134.132:9200/_cat/indices?v
health 当前服务器健康状态:green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)
status 索引打开、关闭状态
index 索引名
uuid 索引统一编号
pri 主分片数量
rep 副本数量
docs.count 可用文档数量
docs.deleted 文档删除状态(逻辑删除)
store.size 主分片和副分片整体占空间大小
pri.store.size 主分片占空间大小

 1.4、删除索引

 在 Postman 中,向 ES 服务器发 DELETE 请求。

2、文档操作

2.1、创建文档

         索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式 。在 Postman 中,向 ES 服务器发 POST 请求。

http://192.168.134.132:9200/wuzhaobo/_doc
请求体
{
    "title":"小米手机",
    "category":"小米",
    "image":"http://www.szh.com/szh.jpg",
    "price":3999.00
}
返回
{
    "_index": "wuzhaobo",
    "_type": "_doc",
    "_id": "7E4haIoB8mJ8_ZzJqBEe",
    "_version": 1,
    "result": "created",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 0,
    "_primary_term": 1
}
上面的数据创建后,由于没有指定数据唯一性标识(ID),默认情况下,ES 服务器会随机生成一个。
如果想要自定义唯一性标识,需要在创建时指定。推荐使用下面这种方式创建文档。
http://192.168.134.132:9200/wuzhaobo/_doc/1002
请求体和不变

2.2、查询单个文档:主键id查询

查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询。在 Postman 中,向 ES 服务器发 GET 请求。
请求地址:http://192.168.134.132:9200/wuzhaobo/_doc/1002
返回:
{
    "_index": "wuzhaobo",
    "_type": "_doc",
    "_id": "1002",
    "_version": 1,
    "_seq_no": 1,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "title": "小米手机",
        "category": "小米",
        "image": "http://www.szh.com/szh.jpg",
        "price": 3999
    }
}

2.3、查看所有文档:全量查询

"query":这里的query代表一个查询对象,里边有不通的查询属性
"match_all":查询类型,例如:match_all(代表查询所有),match、term、range等等
1、查询所有文档
GET 请求地址:http://192.168.134.132:9200/wuzhaobo/_search
        "hits": [
            {
                "_index": "wuzhaobo",
                "_type": "_doc",
                "_id": "7E4haIoB8mJ8_ZzJqBEe",
                "_score": 1,
                "_source": {
                    "title": "小米手机",
                    "category": "小米",
                    "image": "http://www.szh.com/szh.jpg",
                    "price": 3999
                }
            },
            {
                "_index": "wuzhaobo",
                "_type": "_doc",
                "_id": "1002",
                "_score": 1,
                "_source": {
                    "title": "小米手机",
                    "category": "小米",
                    "image": "http://www.szh.com/szh.jpg",
                    "price": 3999
                }
            }
        ]

2.4、修改文档中的全部字段

修改数据时,也可以只修改某一给条数据的局部信息,也可以修改所有字段信息。
修完完之后,再次发送GET请求,查看修改后的文档内容。
PUT 请求地址:http://192.168.134.132:9200/wuzhaobo/_doc/1002
请求体
{
   "title":"华为手机",
   "category":"华为",
   "images":"http://www.szh.com/szh.jpg",
   "price":2400.00
}
返回
{
    "_index": "wuzhaobo",
    "_type": "_doc",
    "_id": "1002",
    "_version": 2,
    "result": "updated",
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "_seq_no": 2,
    "_primary_term": 1
}

2.5、修改文档某一个字段

使用post请求:http://192.168.134.132:9200/wuzhaobo/_doc/1002
请求体
{
   "title":"苹果手机",
   "category":"苹果",
}

2.6、条件查询文档内容

http://192.168.134.132:9200/wuzhaobo/_search?q=category:苹果
上边这个容易乱码,建议使用请求体查询
GET请求地址:http://192.168.134.132:9200/wuzhaobo/_search
请求体:
{
    "query" :{
        "match" : {
            "category" : "苹果"
        }
    }
}

2.7、分页查询和排序文档内容

默认情况下,Elasticsearch 在搜索的结果中,会把文档中保存在_source 的所有字段都返回。
如果我们只想获取其中的部分字段,我们可以添加_source 的过滤
sort 可以让我们按照不同的字段进行排序,并且通过 order 指定排序的方式。desc 降序,asc 升序。
from:当前页的起始索引,默认从 0 开始。 // (页码-1)*每页条数, 第一页:(1-1)*2=0, 第二页:(2-1)*2=2
size:每页显示多少条。
GET 请求地址:http://192.168.134.132:9200/wuzhaobo/_search
请求体
{
    "query" :{
        "match_all" : {
        }
    },
    "from" : 0,  //分页,
    "size" : 2,
    "_source" : ["title","price"], //过滤 只显示这两个参数
    "sort" : { //排序
        "price" : {
            "order" : "desc"
        }
    }
}

2.8、多条件查询 and

bool把各种其它查询通过must(必须 and )、must_not(必须不)、should(应该 or)的方式进行组合 。
GET请求地址:http://192.168.134.132:9200/wuzhaobo/_search
请求体:
{
    "query" :{
        "bool" : {
            "must" : [
                {
                    "match" : {
                        "category" : "小米"
                    }
                },
                {
                    "match" : {
                        "price": 3999
                    }
                }
            ]
        }
    }
}

2.9、多条件查询 or

bool把各种其它查询通过 must(必须 and )、must_not(必须不)、should(应该 or)的方式进行组合 。
GET请求地址:http://192.168.134.132:9200/wuzhaobo/_search
请求体:
{
    "query" :{
        "bool" : {
            "should" : [
                {
                    "match" : {
                        "category" : "小米"
                    }
                },
                {
                    "match" : {
                        "price": 3999
                    }
                }
            ]
        }
    }
}

2.10、多条件查询 :大于 小于

range 查询找出那些落在指定区间内的数字或者时间。range 查询允许以下字符:
gt 大于> gte 大于等于 >= lt 小于 < lte 小于等于 <=
请求地址:http://192.168.134.132:9200/wuzhaobo/_search
请求体:
{
    "query" :{
        "bool" : {
            "must" : [
                {
                    "match" : {
                        "category" : "小米"
                    }
                }
                
            ],
            "filter" : {   //过滤
                "range" : {
                    "price" : {
                        "gt" : 3000,
                        "lt" : 4000
                    }
                }
            }
        }
    }
}

2.11、聚合查询 根据价格分组、对价格求平均值

对某个字段取最大值 max
对某个字段取最小值 min
对某个字段求和 sum
对某个字段取平均值 avg
对某个字段的值进行去重之后再取总数 distinct
分组
{
   "aggs" : { //聚合操作
       "price_group" : { //名称,自定义
           "terms" : { //分组、关键字
               "field" : "price" //分组字段
           }
       }
   },
   "size" : 0
}
价格平均值
{
    "aggs" : {
        "fenzu" : {
            "avg" : {
                "field" : "price"
            }
        }
    },
    "size" : 0
}  
价格最大值
{
    "aggs" : {
        "fenzu" : {
            "max" : {
                "field" : "price"
            }
        }
    },
    "size" : 0
} 

3、映射操作

有了索引库,等于有了数据库中的 database。
接下来就需要建索引库(index)中的映射了,类似于数据库(database)中的表结构(table)。创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)。
字段名:任意填写,下面指定许多属性,例如:title、subtitle、images、price
type:类型,Elasticsearch 中支持的数据类型非常丰富,说几个关键的:
​ String 类型,又分两种:
    ​ text:可分词
    ​ keyword:不可分词,数据会作为完整字段进行匹配
​ Numerical:数值类型,分两类
    ​ 基本数据类型:long、integer、short、byte、double、float、half_float
    ​ 浮点数的高精度类型:scaled_float
​ Date:日期类型
​ Array:数组类型
​ Object:对象
index:是否索引,默认为 true,也就是说你不进行任何配置,所有字段都会被索引。
​ true:字段会被索引,则可以用来进行搜索
​ false:字段不会被索引,不能用来搜索
store:是否将数据进行独立存储,默认为 false
​原始的文本会存储在_source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置"store": true 即可,获取独立存储的字段要比从_source 中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置
analyzer:分词器,这里的 ik_max_word 即使用 ik 分词器
首先是 http://127.0.0.1:9200/user ,发送PUT请求,创建一个user索引,然后在这个索引下创建一个映射。
就类似于在mysql中创建一个名为 user 的数据库,在这个数据库中定义一张表的结构如下:👇👇👇
text 类型为true表示 name 字段可以支持 分词、拆解 操作的查询;而 keyword 类型为true表示 sex 字段仅支持完全匹配的模式;最后 keyword 类型为false表示 tel 字段不支持查询。
1、先创建一个索引
PUT请求地址:http://192.168.134.132:9200/user
然后在索引下创建映射
POST地址:http://192.168.134.132:9200/user/_mapping
{
    "properties" : {
        "name" : {
            "type" : "text",
            "index" : true
        },
        "sex" : {
            "type" : "keyword",
            "index" : true
        },
        "tel" : {
            "type" : "keyword",
            "index" : false
        }
    }
}
返回 :
{
    "acknowledged": true
}
索引有了,映射也有了(数据库有了,表结构有了,就差向表中添加数据了),也就是需要添加文档内容。
post请求地址:http://192.168.134.132:9200/user/_doc/1001
请求体:
{
    "name" : "吴兆波",
    "sex" : "man",
    "tel" : "11111111"
}
查询:get 请求地址:http://192.168.134.132:9200/user/_doc/1001
{
    "_index": "user",
    "_type": "_doc",
    "_id": "1001",
    "_version": 1,
    "_seq_no": 0,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "name": "吴兆波",
        "sex": "man",
        "tel": "11111111"
    }
}
因为name字段是支持text模式查询,即支持分词、拆解操作,做倒排索引,所以虽然文档中的name字段为张起灵,但是经过分词拆解,name为徐、凤、年、凤年 这几种都可以查询出数据。
 查询:get 请求地址:http://192.168.134.132:9200/user/_doc/1001
{
    "query" : {
        "match" : {
            "name" : "兆"
        }
    }
}
由于 sex 字段不支持text分词拆解,仅支持keyword完全匹配的模式,所以源文档数据中 sex 为 man,这里只写个 m 是查询不到的。
最后的tel字段是最苛刻的,压根不支持text、keyword两种查询,所以这里就算是写成和文档中的 tel 一样,也查询不到,因为 tel 字段不支持查询。

六、创建分片索引

PUT请求地址:http://192.168.134.132:9200/user
请求体
{
    "settings" : {
        "number_of_shards" : "3", //3个分片
        "number_of_replicas" : "1" // 1个副本
    }
}
返回:
{
    "acknowledged": true,
    "shards_acknowledged": true,
    "index": "user"
}
去kibana 浏览器,就能看到创建的这个索引

七、故障转移

        因为在master上创建分片索引和副本之后,没有分配到其他节点,如果master宕机,存在数据丢失风险,所以需要启动节点2,副本会自动转移到节点2上,实现了故障转移

八、水平扩容

        如果在使用过程中,容量不够了,就需要扩容,来启动节点3,

        原则就是:1、主和副本是不能放在一起的 2、一定要保证均匀、让每个节点都能均匀的得到请求和访问

        node1和node2上各有1个分片被迁移到node3上,现在每个节点都有2个分片,这样性能也得到了提升

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

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

相关文章

网络拓扑—WEB-IIS服务搭建

文章目录 WEB-IIS服务搭建网络拓扑配置网络IISPC 安装IIS服务配置IIS服务&#xff08;默认站点&#xff09;PC机访问网页 配置IIS服务&#xff08;新建站点&#xff09;PC机访问网页 WEB-IIS服务搭建 网络拓扑 //交换机忽略不计 IIS服务IP&#xff1a;192.168.1.1 PC机IP&…

wordpress主题模板兔Modown 9.1开心版附送erphpdown v17.1插件

Modown 9.1开心版是一款模板兔开发的wordpress主题可&#xff0c;持续更新多年&#xff0c;优秀的资源下载类主题该模板基于Erphpdown&#xff0c;可以销售软件、视频教程、文章等等&#xff0c;通过主题和插件结合可以实现付费下载、付费阅读等功能&#xff0c;配合模板兔的一…

子比主题ACG美化插件[全开源]

WordPress插件是一种可以扩展和增强WordPress网站功能的应用程序。子比主题ACG美化插件听起来像是一个专门为ACG&#xff08;动画、漫画、游戏&#xff09;爱好者设计的美化插件&#xff0c;它可能包含多种功能来改善网站的外观和用户体验。 内置功能开关100意味着这个插件提供…

MySQL主从复制(四):主备切换

一主多从结果&#xff1a; 图中&#xff0c; 虚线箭头表示的是主备关系&#xff0c; 也就是A和A’互为主备&#xff0c; 从库B、 C、 D指向的是主库A。 一主多从的设置&#xff0c; 一般用于读写分离&#xff0c; 主库负责所有的写入和一部分读&#xff0c; 其他的读请求则由从…

几个速度比较快的 Linux 开源镜像站及支持的资源列表

搜狐开源镜像站 https://mirrors.sohu.com/ File Name CPAN/ FreeBSD/ QpenBSD/ RockyL apache/ archlinux/ centos/ ceph/ cygwin/ debian/ debian–cd/ debian-security/ deepin/ deepin-cd/ docker-ce/ fedora/ fedora-epel/ gentoo/ lib/ mysql/ nginx/ opensuse/ php/ ubu…

Three.js 研究:1、如何让物体动起来

1、制作模型动画 2、模型动画在代码中的调用 使用这个例子进行修改&#xff0c;使他能动作webgl_animation_skinning_morph.html 制作好的模型放到如下路径 /three.js-master/examples/models/gltf/无标题.gltf修改加载模型文件的地址 修改动画名称 运行 点击动画后&…

高效写代码java-推荐插件1(格式转化 ConverterX )-日后待更新

ConverterX 主要功能:格式转化 字符串格式转换 日期转换 Json格式转义 字符格式 快捷键 ctrl shiftS Upper(CODEEASE)字符串全部变成大写Lower(codeease)字符串全部变成小写Camel(codeEase)字符串变成小驼峰ClassCaemel(CodeEase)字符串变成大驼峰UnderlineUpper(CODE_EAS…

kimi :系统框架 实力学习

学海无涯&#xff0c;你&#xff0c;准备好了吗&#xff1f; 学习一个新的嵌入式系统架构&#xff0c;你"只"需要 - 1 - 手册/速查函数&#xff08;对于比较大的架构&#xff0c;F12往往返回多个结果&#xff0c;增加混乱&#xff09;&#xff1b; 2 - 源代码和VS&am…

Nacos 微服务管理

Nacos 本教程将为您提供Nacos的基本介绍&#xff0c;并带您完成Nacos的安装、服务注册与发现、配置管理等功能。在这个过程中&#xff0c;您将学到如何使用Nacos进行微服务管理。下方是官方文档&#xff1a; Nacos官方文档 1. Nacos 简介 Nacos&#xff08;Naming and Confi…

Apache JMeter操作

中文-新建组配置 测试计划界面介绍 异常信息 右上角那个小三角可以看到jemter的执行信息&#xff0c;如果你的压测执行不了可以去里面看看一般是报错了 用户自定义变量 可以在这里配置压测的全局变量&#xff0c;这样我们在使用的时候就不用传具体的值&#xff0c;传变量的…

TP4065H 是一款600mA线性锂离子电池充电器芯片 30V高压输入带OVP保护

一般描述 TP4065H是一款输入电源30V高耐压具备OVP保护功能完整的单节锂离子电池采用恒定电流/恒定电压线性充电器。采用SOT23-5封装与较少的外部元件数目使得TP4065H成为便携式应用的理想选择。TP4065H可以适合USB电源和适配器电源工作。TP4065H的CH RG端口的耐压最高也…

智能语义识别电影机器人的rasa实现

文章目录 0.前言1.项目整体框架2.rasa训练数据结构4.rasa启动命令及用到的API 0.前言 最近做了一个智能电影机器人的项目&#xff0c;我主要负责用户语义意图识别&#xff0c;用的框架是rasa&#xff0c;对应的版本为 3.6.15&#xff0c;对应的安装命令为: pip3 install rasa…

Oracle 证书的重要性

随着信息技术的飞速发展&#xff0c;数据库管理已成为企业运营中不可或缺的一部分。Oracle作为全球领先的数据库管理系统提供商&#xff0c;其Oracle Certified Professional&#xff08;OCP&#xff09;认证已成为数据库管理员和开发人员追求的专业认证之一。本文将深入探讨Or…

LeetCode450删除二叉搜索树中的节点

题目描述 给定一个二叉搜索树的根节点 root 和一个值 key&#xff0c;删除二叉搜索树中的 key 对应的节点&#xff0c;并保证二叉搜索树的性质不变。返回二叉搜索树&#xff08;有可能被更新&#xff09;的根节点的引用。一般来说&#xff0c;删除节点可分为两个步骤&#xff1…

算法题1:电路开关(HW)

实验室对一个设备进行通断测试,实验员可以操控开关进行通断,有两种情况: ps,图没记下来,凭印象画了类似的 初始时,3个开关的状态均为断开;现给定实验员操控记录的数组 records ,records[i] = [time, switchId],表示在时刻 time 更改了开关 switchId 的状态。 开关 s…

数据结构~~二叉树-堆

目录 一、基本概念 树的概念 二叉树-堆的概念 二、堆的结构 三、堆排序 向上调整建堆 向下调整建堆 四、TOP-K 五、完整代码 六、总结 一、基本概念 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关…

探索Python编程乐趣:制作气泡反弹小游戏

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;Python编程的轻松入门 二、游戏实现原理&#xff1a;气泡反弹的逻辑 …

DFSBFS、827. 最大人工岛、leetcode

DFS&#xff08;深度优先搜索&#xff09;与BFS&#xff08;广度优先搜索&#xff09;作为图论中的两大主流方法&#xff0c;在图相关题目解题中应用较多。 题目链接及描述 827. 最大人工岛 - 力扣&#xff08;LeetCode&#xff09; 做这道题目时&#xff0c;自己想的是首先遍…

IDEA中一些常见操作【持续更新】

文章目录 前言善用debugidea中debug按钮不显示自动定位文件【始终选择打开的文件】idea注释不顶格【不在行首】快速定位类的位置【找文件非常快】创建文件添加作者及时间信息快速跳转到文件顶端 底端 前言 因为这些操作偶尔操作一次&#xff0c;不用刻意记忆&#xff0c;有个印…

基于多源数据的微服务系统失败测试用例诊断

简介 本文介绍由南开大学、华为云及清华大学共同合作的论文:基于多源数据的微服务系统失败测试用例诊断。该论文已被FSE 2024&#xff08;The ACM International Conference on the Foundations of Software Engineering&#xff09; 会议录用&#xff0c;论文标题为: Fault D…