使用Docker部署ElasticSearch7+ELK(附带ES操作操作命令集)

ElasticSearch 7+ELK

  • 程序安装
    • Docker安装
      • 下载ES镜像
      • 提前创建挂载文件夹
      • 添加配置文件
      • 创建并启动容器
      • 可能出现的异常
      • 安装IK分词
      • 使用ElasticHD客户端工具(目前使用发现无法做增删改)
      • 安装Kibana
    • 软件包安装
      • 安装ElasticSearch(需要JDK1.8+)
      • 安装IK(下载和elasticsearch相同版本的IK)
      • 安装Kibana(下载和elasticsearch相同版本)
      • 安装Filebeat(可以理解为简化版的logstash)
  • 实操
    • ElasticSearch
      • 基础操作命令
        • 1. 查看节点状态
        • 2、查看索引
        • 3、查看节点列表
      • 操作分词器命令
        • 1、ES默认分词器
        • 2、IK最小切分
        • 3、IK最细粒度切分 全部词库的可能
        • 4、创建索引时设置默认分词器,如果不设置默认就是standard分词器
      • 操作索引命令
        • 1、增加索引
        • 2、创建带字段规则的索引 类似表字段类型
        • 3、创建带字段规则+默认分词器的索引
        • 4、删除索引
      • POST和PUT的区别
      • 操作document命令
        • 1、新增document
        • 2、搜索 type 全部数据
        • 3、查找指定 id 的 document 数据
        • 4、修改 document
        • 5、删除一个 document
        • 6、按条件查询(全部)
        • 7、按照字段的分词查询
        • 8、按照分词子属性查询
        • 9、按照短语查询
        • 10、模糊查询(如果分词器中没有对应分词可以使用)
        • 11、查询后过滤
        • 12、查询前过滤(推荐使用)
        • 13、按范围过滤
        • 14、排序
        • 15、分页查询
        • 16、指定查询的字段
        • 17、聚合
        • 18、高亮
      • 关于Mapping
        • 1、查看mapping
        • 2、手动指定Mapping
    • IK
      • IK分词器细粒度的拆分
      • 自定义ik词汇

程序安装

Docker安装

下载ES镜像

docker pull elasticsearch:7.6.1

提前创建挂载文件夹

mkdir -p /home/docker/elasticsearch/config
mkdir -p /home/docker/elasticsearch/data
mkdir -p /home/docker/elasticsearch/plugins# 创建好之后需要给/home/docker/elasticsearch目录赋予777权限 不然启动会失败
sudo chmod -R 777 /home/docker/elasticsearch/

添加配置文件

vi /home/docker/elasticsearch/config/elasticsearch.yml# 添加以下配置
# 集群名称
cluster.name: "docker-cluster" 
# 节点名称
node.name: node1
# http端口
http.port: 9200
# 访问权限
network.host: 0.0.0.0
http.host: 0.0.0.0

创建并启动容器

docker run --name elasticsearch -p 9200:9200  -p 9300:9300 \-e "discovery.type=single-node" \-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \-v /home/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \-v /home/docker/elasticsearch/data:/usr/share/elasticsearch/data \-v /home/docker/elasticsearch/plugins:/usr/share/elasticsearch/plugins \--restart always-d elasticsearch:7.6.1

说明

  • -p 端口映射
  • -e discovery.type=single-node 单点模式启动
  • -e ES_JAVA_OPTS=“-Xms512m -Xmx512m”:设置启动占用的内存范围
  • -v 目录挂载
  • –restart always docker容器启动时自动启动
  • -d 后台运行

可能出现的异常

1、 因虚拟内存太少导致
处理:sudo sysctl -w vm.max_map_count=655360

安装IK分词

下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.6.1

# 创建目标文件夹,ES会自动读取plugins这个目录下的插件
mkdir -p /home/docker/elasticsearch/plugins/ik
# 将下载好的ik分词器放入/home/docker/elasticsearch/plugins/ik下
# 解压
unaip elasticsearch-analysis-ik-7.6.1.zip

使用ElasticHD客户端工具(目前使用发现无法做增删改)

ElasticHD轻量使用方便,在window环境下提供了一个exe程序
下载地址:https://github.com/qax-os/ElasticHD/tags

安装Kibana

1、下载镜像

docker pull kibana:7.6.1

2、创建挂载文件和目录

mkdir -p /home/docker/elasticsearch/kibana/config/
vi /home/docker/elasticsearch/kibana/config/kibana.yml
# 添加以下配置# Default Kibana configuration for docker target
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://172.16.2.109:9200" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN" #汉化

3、启动

docker run -d \--name=kibana \--restart=always \-p 5601:5601 \-v /home/docker/elasticsearch/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \kibana:7.6.1

软件包安装

百度网盘图灵资料中有

安装ElasticSearch(需要JDK1.8+)

1、Elasticsearch下载地址
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz

2、解压elasticsearch-7.6.1-linux-x86_64.tar.gz到/usr/local/目录
tar -avxf elasticsearch-7.6.1-linux-x86_64.tar.gz -C /usr/local/

3、进入解压后的elasticsearch目录
(1)新建data目录:mkdir data
(2)修改config/elasticsearch.yml:vim config/elasticsearch.yml
取消下列项注释并修改:

cluster.name: my-application #集群名称
node.name: node-1 #节点名称
#数据和日志的存储目录
path.data: /usr/local/elasticsearch-7.6.1/data
path.logs: /usr/local/elasticsearch-7.6.1/logs
#设置绑定的ip,设置为0.0.0.0以后就可以让任何计算机节点访问到了
network.host: 0.0.0.0
http.port: 9200 #数据交互端口
#设置在集群中的所有节点名称,这个节点名称就是之前所修改的,当然你也可以采用默认的也行,目前是单机,放入一个节点即可
cluster.initial_master_nodes: ["node-1"]#开启跨域访问支持,默认为false  
http.cors.enabled: true  
#跨域访问允许的域名地址,(允许所有域名)以上使用正则  
http.cors.allow-origin: /.*/ 

(3)修改 ./config/jvm.options: vim config/jvm.options

-Xms200m
-Xmx200m

4、启动ES(ES不能使用root用户启动需要创建新用户)
(1)创建用户
adduser es
passwd es
(2)改一下es目录所属用户:
chown es /usr/local/elasticsearch-7.6.1/ -R
(3)vim 编辑 vim /etc/security/limits.conf,在末尾加上

es soft nofile 65536
es hard nofile 65536
es soft nproc 4096
es hard nproc 4096

(4)vim 编辑 vim /etc/security/limits.d/20-nproc.conf,将* 改为用户名(es):

es          soft    nproc     4096
root       soft    nproc     unlimited

(5)vim 编辑 vim /etc/sysctl.conf,在末尾加上:

vm.max_map_count = 655360

(6)执行: sysctl -p

(7)登录刚才新建的es用户,并启动elasticsearch
su es
./bin/elasticsearch (前台启动)
./bin/elasticsearch -d(后台启动)

(8)关闭elasticsearch
kill -9 pid 直接杀掉进程
//搜索es进程pid
ps aux | grep elasticsearch

安装IK(下载和elasticsearch相同版本的IK)

1、切换目录
cd /usr/local/elasticsearch-7.6.1/plugins/
2、创建ik文件夹
mkdir ik
3、切换到ik文件夹下进行文件上传
cd ik
4、没有unzip命令的同学输入如下命令安装unzip命令
yum install -y unzip
5、对zip进行解压
unzip elasticsearch-analysis-ik-7.6.1.zip

安装Kibana(下载和elasticsearch相同版本)

1、下载kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-linux-x86_64.tar.gz

2、解压
tar -zxvf kibana-7.6.1-linux-x86_64.tar.gz kibana-7.6.1

3、修改kibana配置文件kibana.yml

vim config/kibana.yml# 放开注释,将默认配置改成如下:server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://127.0.0.1:9200"]
server.name: "one-server" #随意
i18n.locale: "zh-CN" #汉化

4、启动kibana
./kibana --allow-root
nohup ./kibana --allow-root & (后台启动)
5、关闭kibana
kill -9 pid 直接杀掉进程
//搜索es进程pid
netstat -tunlp|grep 5601

安装Filebeat(可以理解为简化版的logstash)

1、参考资料
https://www.cnblogs.com/zsql/p/13137833.html#_label2_0

2、filebeat和logstash的关系
因为logstash是jvm跑的,资源消耗比较大,所以后来作者又用golang写了一个功能较少但是资源消耗也小的轻量级的logstash-forwarder。不过作者只是一个人,加入http://elastic.co公司以后,因为es公司本身还收购了另一个开源项目packetbeat,而这个项目专门就是用golang的,有整个团队,所以es公司干脆把logstash-forwarder的开发工作也合并到同一个golang团队来搞,于是新的项目就叫filebeat了。

3、官网下载,选择和ES相同的二进制版本
https://www.elastic.co/cn/downloads/past-releases#filebeat

4、将下载好的压缩包放入需要收集日志的服务器中并且解压

tar -xzvf filebeat-7.6.1-linux-x86_64.tar.gz

在这里插入图片描述
5、编写配置

# 在filebeat-7.6.1-linux-x86_64目录内新建一个配置文件
touch filebeat_log.yml
# 编辑添加需要的配置文件夹信息
vi filebeat_log.yml
#添加以下信息
# filebeat.inputs.type :输入文件类型  log:日志类型
# enabled:是否开启
# paths:日志文件目录 可以写多个
# output.elasticsearch.hosts:ES服务地址
filebeat.inputs:
- type: logenabled: truepaths:- /var/mq/log/server.log.*output.elasticsearch:hosts: ["192.168.21.130:9200", "192.168.21.131:9200", "192.168.21.132:9200"]

6、Kibana中查看日志
1、先查看Filebeat创建索引的名称
Management->索引管理
在这里插入图片描述
2、配置查看这个日志
logs->设置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实操

  • 1、http://note.youdao.com/noteshare?id=83ea7925e0a1ae40e037f682b98d9874&sub=07E63083340A409683C3D8B26786C549
  • 2、https://note.youdao.com/ynoteshare/index.html?id=7fffae927f3bc06aab2fdc663ec5cad3&type=note&_time=1648026973975

ElasticSearch

text类型在存储数据的时候会默认进行分词,并生成索引。而keyword存储数据的时候,不会分词建立索引,显然,这样划分数据更加节省内存。
这样,我们映射了某一个字段为keyword类型之后,就不用设置任何有关分词器的事情了,该类型就是默认不分词的文本数据类型。而对于text类型,我们还可以设置它的分词类型。

基础操作命令

在这里插入图片描述

1. 查看节点状态
GET /_cat/health?v前两个是时间戳,其余含义如下:
1. cluster ,								集群名称
2. status,									集群状态 green代表健康;yellow代表分配了所有主分片,但至少缺少一个副本,此时集群数据仍旧完整;red代表部分主分片不可用,可能已经丢失数据。
3. node.total,								代表在线的节点总数量
4. node.data,								代表在线的数据节点的数量
5. shards, active_shards 					存活的分片数量
6. pri,active_primary_shards			    存活的主分片数量 正常情况下 shards的数量是pri的两倍。
7. relo, relocating_shards 				迁移中的分片数量,正常情况为 0
8. init, initializing_shards 				初始化中的分片数量 正常情况为 0
9. unassign, unassigned_shards 			未分配的分片 正常情况为 0
10. pending_tasks,							准备中的任务,任务指迁移分片等 正常情况为 0
11. max_task_wait_time,					任务最长等待时间
12. active_shards_percent,					正常分片百分比 正常情况为 100%
2、查看索引
GET /_cat/indices?v含义:
1. health						索引健康状态
2. status						索引的开启状态
3. index						索引名称
4. uuid							索引uuid
5. pri							索引主分片数
6. rep							索引副本分片数量
7. docs.count					索引中文档总数
8. docs.deleted					索引中删除状态的文档
9. store.size					主分片+副本分分片的大小
10. pri.store.size				主分片的大小
3、查看节点列表
GET /_cat/nodes?v

在这里插入图片描述

操作分词器命令

1、ES默认分词器
POST _analyze{"analyzer":"standard","text":"中国共产党"}
2、IK最小切分
GET _analyze
{"analyzer": "ik_smart","text": "中国共产党"
}
3、IK最细粒度切分 全部词库的可能
GET _analyze
{"analyzer": "ik_max_word","text": "中国共产党"
}
4、创建索引时设置默认分词器,如果不设置默认就是standard分词器
# 设置分词器
PUT /myindex
{"settings" : {"index" : {"analysis.analyzer.default.type": "ik_max_word"}}
}
# 查看分词器  如果自定义设置了分词器可以在索引信息中看到设置的分词器名称,如果没有使用的就是系统默认分词器
GET myindex

操作索引命令

1、增加索引
PUT /test01

在这里插入图片描述

2、创建带字段规则的索引 类似表字段类型
PUT /test02
{"mappings": {"properties": {"name":{"type": "text"},"age":{"type": "long"},"birthday":{"type": "date"},"info":{"type": "text","fields" : { # 添加一个类型 让info可以支持排序和聚合查询"keyword" : {"type" : "keyword","ignore_above" : 256}}}}}
}
3、创建带字段规则+默认分词器的索引
PUT /test03
{"mappings": {"properties": {"name":{"type": "text"},"age":{"type": "long"},"birthday":{"type": "date"}}},"settings" : {"index" : {"analysis.analyzer.default.type": "ik_max_word"}}
}
4、删除索引
DELETE /test01

在这里插入图片描述

POST和PUT的区别

  • 1、PUT、GET、DELETE是幂等的
  • 2、POST /uri 创建 PUT /uri/xxx 更新或创建
  • 3、POST不用加具体的id,它是作用在一个集合资源之上的(/uri),而PUT操作是作用在一个具体资源之上的(/uri/xxx)。在ES中,如果不确定document的ID(documents具体含义见下),那么直接POST对应uri( “POST /website/blog” ),ES可以自己生成不会发生碰撞的UUID;如果确定document的ID,比如 “PUT /website/blog/123”,那么执行创建或修改(修改时_version版本号提高1)

操作document命令

1、新增document

说明: 如果之前没建过 index 或者 type,es 会自动创建。

PUT /movie_index/movie/1
{ "id":1,"name":"operation red sea","doubanScore":8.5,"actorList":[  {"id":1,"name":"zhang yi"},{"id":2,"name":"hai qing"},{"id":3,"name":"zhang han yu"}]
}
PUT /movie_index/movie/2
{"id":2,"name":"operation meigong river","doubanScore":8.0,"actorList":[  {"id":3,"name":"zhang han yu"}]
}PUT /movie_index/movie/3
{"id":3,"name":"incident red sea","doubanScore":5.0,"actorList":[  {"id":4,"name":"zhang chen"}]
}
2、搜索 type 全部数据
GET /movie_index/movie/_search
3、查找指定 id 的 document 数据
GET /movie_index/movie/1
4、修改 document

A. 整体替换
说明: 修改和新增没有区别,是做一个覆盖操作

PUT /movie_index/movie/3
{"id":"3","name":"incident red sea","doubanScore":"8.0","actorList":[  {"id":"1","name":"zhang chen"}]
}

B. 只修改某个字段

POST /movie_index/movie/3/_update
{"doc": {"doubanScore":"8.1"}
}
5、删除一个 document
DELETE /movie_index/movie/3
6、按条件查询(全部)
GET /movie_index/movie/_search
{"query": {"match_all": {}}
}
7、按照字段的分词查询
GET /movie_index/movie/_search
{"query": {"match": {"name": "sea"}}
}
8、按照分词子属性查询
GET /movie_index/movie/_search
{"query": {"match": {"actorList.name": "zhang"}}
}
9、按照短语查询

说明: 按照短语查询是指匹配某个 field 的整个内容, 不再利用分词技术

GET /movie_index/movie/_search
{"query": {"match_phrase": {"name": "operation red"}}
}
10、模糊查询(如果分词器中没有对应分词可以使用)

说明: 校正匹配分词,当一个单词都无法准确匹配,es 通过一种算法对非常接近的单词也给与一定的评分,能够查询出来,但是消耗更多的性能。

GET /movie_index/movie/_search
{"query": {"fuzzy": {"name": "red"}}
}
11、查询后过滤
GET /movie_index/movie/_search
{"query": {"match": {"name": "red"}},"post_filter": {"term": {"actorList.id": "3"}}
}
12、查询前过滤(推荐使用)
GET movie_index/movie/_search
{"query": {"bool": {"filter": [{"term": {"actorList.id": 3}},{"term":{"actorList.id": 1}}],"must": {"match": {"name": "red"}}}}
}
13、按范围过滤
GET movie_index/movie/_search
{"query": {"bool": {"filter": {"range": {"doubanScore": {"gt": 5,"lt": 9}}}}}
}
14、排序
GET movie_index/movie/_search
{"query":{"match": {"name":"red operation"}}, "sort": [{"doubanScore": {"order": "desc"}}]
}
15、分页查询
# from 从第一条数据开始 size:查询几条
GET movie_index/movie/_search
{"query": { "match_all": {} },"from": 1,"size": 1
}
16、指定查询的字段
GET movie_index/movie/_search
{"query": { "match_all": {} },"_source": ["name", "doubanScore"]
}
17、聚合
# 每个演员参演了多少部电影 (按名字进行计数)
GET movie_index/movie/_search
{"aggs": {"groupby_actor": {"terms": {"field": "actorList.name.keyword"}}}
}
18、高亮
GET /movie_index/movie/_search
{"query": {"match": {"name": "sea"}},"highlight":{"fields":{"name":{}}}
}#自定义高亮标签
GET /movie_index/movie/_search
{"query": {"match": {"name": "sea"}},"highlight":{"pre_tags": "<p style='color:red'>","post_tags": "</p>","fields":{"name":{}}}
}

关于Mapping

通过 Mapping 来设置和查看每个字段的数据类型.

1、查看mapping
GET movie_index/_mapping
2、手动指定Mapping

A:搭建索引

# type:字段类型  
# index:是否建立倒排索引 默认值:true建立  
# store:是否存储数据 默认值: true存储  如果不存储这个字段有索引能通过这个字段查询,但是获取不到这个值的内容
PUT /movie_chn?include_type_name=true
{"mappings": {"movie":{"properties": {"id":{"type": "long","index": false,"store": true},"name":{"type": "text", "analyzer": "ik_smart"},"doubanScore":{"type": "double"},"actorList":{"properties": {"id":{"type":"long"},"name":{"type":"keyword"}}}}}}
}

B:插入数据

PUT /movie_chn/movie/1
{ "id":1,"name":"红海行动","doubanScore":8.5,"actorList":[  {"id":1,"name":"张译"},{"id":2,"name":"海清"},{"id":3,"name":"张涵予"}]
}
PUT /movie_chn/movie/2
{"id":2,"name":"湄公河行动","doubanScore":8.0,"actorList":[  {"id":3,"name":"张涵予"}]
}PUT /movie_chn/movie/3
{"id":3,"name":"红海事件","doubanScore":5.0,"actorList":[  {"id":4,"name":"张晨"}]
}

C:查询

GET /movie_chn/movie/_search
{"query": {"match": {"name": "红海"}}
}GET /movie_chn/movie/_search
{"query": {"term": {"actorList.name": "张"}}
}

IK

IK分词器细粒度的拆分

1、ik_smart:会将文本做最粗粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、国歌」
2、ik_max_word:会将文本做最细粒度的拆分,例如「中华人民共和国国歌」会被拆分为「中华人民共和国、中华人民、中华、华人、人民共和国、人民、人、民、共和国、共和、和、国国、国歌」,会穷尽各种可能的组合

GET _analyze
{"analyzer": "ik_smart","text": "中华人民共和国国歌"
}GET _analyze
{"analyzer": "ik_max_word","text": "中华人民共和国国歌"
}

自定义ik词汇

1、进入elasticsearch/plugins/ik/config目录
2、新建一个myDict.dic文件,编辑内容(以utf8无bom保存, 如果不行加一些换行或者空出第一行)
3、修改IKAnalyzer.cfg.xml(在ik/config目录下)
在这里插入图片描述
4、重启es

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

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

相关文章

【时区】Flink JDBC 和CDC时间字段时区 测试及时间基准

关联文章: 各种时间类型和timezone关系浅析 一、测试目的和值 1. 测试一般的数据库不含time zone的类型的时区。 mysql timestamp(3) 类型postgres timestamp(3) 类型sqlserver datetime2(3) 类型oracle类型 TIMESTAMP(3) 类型 在以下测试之中均为ts字段 2.测试CDC中元数据…

【数据结构】堆的应用-----TopK问题

目录 一、前言 二、Top-k问题 &#x1f4a6;解法一&#xff1a;暴力排序 &#x1f4a6;解法二&#xff1a;建立N个数的堆 &#x1f4a6;解法三&#xff1a;建立K个数的堆&#xff08;最优解&#xff09; 三、完整代码和视图 四、共勉 一、前言 在之前的文章中&#xff…

【Kubernetes】当K8s出现问题时,我们可以从哪些方面排查出

前言 kubernetes&#xff0c;简称K8s&#xff0c;是用8代替名字中间的8个字符“ubernete”而成的缩写。是一个开源的&#xff0c;用于管理云平台中多个主机上的容器化的应用&#xff0c;Kubernetes的目标是让部署容器化的应用简单并且高效&#xff08;powerful&#xff09;,Kub…

python中dir()和help()的作用

在 Python 中&#xff0c;dir() 和 help() 是两个常用的内置函数&#xff0c;用于获取对象的属性和方法信息以及提供帮助文档。 dir(object) 函数返回一个包含对象 object 的属性和方法名称的列表。如果没有提供参数&#xff0c;则返回当前作用域内的所有名称。例如&#xff0…

DAMA-DMBOK2重点知识整理CDGA/CDGP——第14章 大数据与数据科学

目录 一、分值分布 二、重点知识梳理 1、引言 1.1 业务驱动因素 1.2 原则 1.3 基本理念 2、活动 2.1 定义大数据战略和业务需求 2.2 选择数据源 2.3 获得和接收数据源 2.4 制定数据假设和方法 2.5 集成和调整数据进行分析 2.6 使用模型探索数据 2.7 部署和监控 …

Linux CentOS7 vim多文件与多窗口操作

窗口是可视化的分割区域。Windows中窗口的概念与linux中基本相同。连接xshell就是在Windows中新建一个窗口。而vim打开一个文件默认创建一个窗口。同时&#xff0c;Vim打开一个文件也就会建立一个缓冲区&#xff0c;打开多个文件就会创建多个缓冲区。 本文讨论vim中打开多个文…

【单片机】14-I2C通信之EEPROM

1.EEPROM概念 1.EEPROM 1.1 一些概念 &#xff08;1&#xff09;一些概念&#xff1a;ROM【只读存储器---硬盘】&#xff0c;RAM【随机访问存储器--内存】&#xff0c;PROM【可编程的ROM】&#xff0c;EPROM【可擦除ROM】&#xff0c;EEPROM【电可擦除ROM】 1.2 为什么需要EE…

应用大五人格测试,来做个人职业规划

应用大五人格测试做职业规划&#xff0c;一方面能让大学生清楚知晓自己的性格特征&#xff0c;置身适合怎样的职业&#xff0c;让他们结合自己的兴趣爱好职业走向&#xff0c;进一步了解自己适合做的职业规划。另一方面可以帮助他们结合职业规划来安排人生&#xff0c;一步一个…

Transformer学习-self-attention

这里写自定义目录标题 Self-attentionMulti-head self-attention用self-attention解决其他问题 Self-attention 用Wq、Wk、Wv分别乘输入向量得到q、k、v向量 用每个q向量乘所有的k向量得到对应项的attention&#xff0c;即用每项的query向量去匹配所有的key向量&#xff0c;得…

【进阶C语言】自定义类型

本节内容大致目录如下&#xff1a; 1.结构体 2.位段 3.枚举 4.联合&#xff08;共用体&#xff09; 以上都是C语言中的自定义类型&#xff0c;可以根据我们的需要去定义。 一、结构体 一些基础知识在初阶C语言的时候已经介绍过&#xff0c;在这里粗略概括&#xff1b;重…

代码随想录算法训练营第五十五天 | 动态规划 part 12 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

目录 300.最长递增子序列思路代码 674. 最长连续递增序列思路代码 718. 最长重复子数组思路代码 300.最长递增子序列 Leetcode 思路 dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度递推公式&#xff1a;if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1)初…

面试总结之Spring篇

一、AOP 1、什么是AOP 1.1、概述 AOP&#xff08;Aspect-Oriented Programming&#xff09;&#xff1a;面向切面编程&#xff0c;即把一些业务逻辑中的相同代码抽取出来&#xff0c;让业务逻辑更加简练清爽 如果要CRUD写一堆业务&#xff0c;可如何实现业务代码前后进行打印…

计算机竞赛 深度学习驾驶行为状态检测系统(疲劳 抽烟 喝水 玩手机) - opencv python

文章目录 1 前言1 课题背景2 相关技术2.1 Dlib人脸识别库2.2 疲劳检测算法2.3 YOLOV5算法 3 效果展示3.1 眨眼3.2 打哈欠3.3 使用手机检测3.4 抽烟检测3.5 喝水检测 4 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于深度学习的驾…

WebSocket的那些事(6- RabbitMQ STOMP目的地详解)

目录 一、目的地类型二、Exchange类型目的地三、Queue类型目的地四、AMQ Queue类型目的地五、Topic类型目的地 一、目的地类型 在上节 WebSocket的那些事&#xff08;5-Spring STOMP支持之连接外部消息代理&#xff09;中我们已经简单介绍了各种目的地类型&#xff0c;如下图&…

【强化算法专题一】双指针算法

【强化算法专题一】双指针算法 1.双指针算法--移动零2.双指针算法--复写零3.双指针算法--快乐数4.双指针算法--盛水最多的容器5.双指针算法--有效三角形的个数6.双指针算法--和为s的两个数7.双指针算法--三数之和8.双指针算法--四数之和 1.双指针算法–移动零 算法原理解析----…

【JavaScript】读取本地json文件并绘制表格

本文为避免跨域问题&#xff0c;使用了改造过的本地json文件的方法实现读取json数据并绘制表格。 如果发起http请求获取本地 json文件中数据&#xff0c;需要架设本地服务器&#xff0c;本文不做阐述。 概述 1、json在本地&#xff0c;并不需要从服务器下载。 2、采用jquery…

国庆作业day5

应用层&#xff1a;提供用户与网络应用程序之间的接口。表示层&#xff1a;负责数据的格式转换、加密和解密。会话层&#xff1a;负责建立、管理和终止会话。它提供会话控制和同步&#xff0c;允许应用程序之间建立连接和交换数据。传输层&#xff1a;提供端到端的连接。网络层…

postgresql-管理数据表

postgresql-管理数据表 创建表数据类型字段约束表级约束模式搜索路径 修改表添加字段删除字段添加约束删除约束修改字段默认值修改字段数据类型重命名字段重命名表 删除表 创建表 在 PostgreSQL 中&#xff0c;使用 CREATE TABLE 语句创建一个新表&#xff1a; CREATE TABLE …

专业PDF编辑阅读工具PDF Expert mac中文特点介绍

PDF Expert mac是一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 PDF Expert mac软件特点 PDF编辑&#xff1a;PDF Expert提供了丰富的PDF编辑功能&#xff0c;包括添加、删除、移动、旋转、缩放、裁剪等操作…

树莓派4B与STM32串口通信

目录 2上篇文章的补充 2.1 树莓派通信设置 3树莓派与STM32通信 3.1接线准备 3.2代码 3.2.1 STM32代码&#xff1a; 3.2.2树莓派代码&#xff1a; 2上篇文章的补充 2.1 树莓派通信设置 在上篇文章的基础上&#xff0c;进一步的设置 终端输入&#xff1a;sudo minicom …