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

news2024/11/23 5:00:52

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: log
  enabled: true
  paths:
    - /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.coloradmin.cn/o/1057556.html

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

相关文章

【高阶数据结构】哈希(哈希表、哈希桶)

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C进阶 ⭐代码仓库&#xff1a;C进阶 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

Codeforces Round 901 (Div. 2)

Problem - A - Codeforces 贪心 每次都先让b减到1&#xff0c;然后再去选择工具来增加时间 AC代码: #include<bits/stdc.h> #define endl \n #define int long long using namespace std; const int N110; int x[N]; int a,b,n; void solve() {cin>>a>>b…

【C语言】模拟实现strlen

strlen是非常常用的字符串函数 目录 介绍&#xff1a;模拟实现&#xff1a;计数器递归指针-指针 介绍&#xff1a; 我们可得这个函数是求在字符串开始与\0之间的字符串长度 代码示例&#xff1a; #include <stdio.h> int main() {const char* str1 "abcdef"…

神器 CodeWhisperer

这两天看到了好多关于 Amazon CodeWhisperer 针对个人用户终身免费使用的消息&#xff0c;便抽空简单来重点介绍下如何在 VS Code 这款 IDE 上安装和使用 CodeWhisperer。 亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视…

Linux——进程间通信——system V系列

✅<1>主页&#xff1a;&#xff1a;我的代码爱吃辣 &#x1f4c3;<2>知识讲解&#xff1a;Linux——进程间通信——system V系列 ☂️<3>开发环境&#xff1a;Centos7 &#x1f4ac;<4>前言&#xff1a;system V 版本进程间通信的机制。 目录 一.共享…

WebGPU 入门:绘制一个三角形

大家好&#xff0c;我是前端西瓜哥。 今天我们来入门 WebGPU&#xff0c;来写一个图形版本的 Hello World&#xff0c;即绘制一个三角形。 WebGPU 是什么&#xff1f; WebGPU 是一个正在开发中的潜在 Web 标准和 JavaScript API&#xff0c;目标是提供 “现代化的 3D 图形和计…

AutoCAD 产品设计:图形单位

本文讲解 AutoCAD 产品的图形单位功能产品设计&#xff0c;没有任何代码实现。 使用的 AutoCAD 为 2020 版本 图形单位是什么&#xff1f; 图形单位是用于设置 一些属性数据应该用什么格式显示 的命令&#xff0c;命令标识为 un&#xff08;units&#xff09;。 举个例子。 …

操作EXCEL计算3万条数据的NDVI并填入

Python操作EXCEL&#xff0c;计算3万条数据的NDVI并填入 问题描述 现在是有构建好了的查找表&#xff0c;不过构建了3万条数据&#xff0c;在excel中手动计算每行的NDVI值太麻烦了&#xff0c;也不会操作。 就试试python吧&#xff0c;毕竟python自动处理大型EXCEL数据很方便…

黑马头条项目环境搭建

注册中心网关配置 spring:cloud:gateway:globalcors:add-to-simple-url-handler-mapping: truecorsConfigurations:[/**]:allowedHeaders: "*"allowedOrigins: "*"allowedMethods:- GET- POST- DELETE- PUT- OPTIONroutes:# 平台管理- id: useruri: lb://…

51单片机可调幅度频率波形信号发生器( proteus仿真+程序+原理图+报告+讲解视频)

51单片机可调幅度频率信号发生器( proteus仿真程序原理图报告讲解视频&#xff09; 讲解视频1.主要功能&#xff1a;2.仿真3. 程序代码4. 原理图4. 设计报告5. 设计资料内容清单&&下载链接***[资料下载链接](https://docs.qq.com/doc/DS1daV1BKRXZMeE9u)*** 51单片机可…

数据结构——计数与归并非递归

排序算法 前言一、归并的非递归实现二、计数排序三、序算法复杂度及稳定性分析总结 前言 重要的事说三遍&#xff01; 学习&#xff01;学习&#xff01;学习&#xff01; 努力!努力!努力&#xff01; 一、归并的非递归实现 代码实现&#xff1a; void MergeSortNonR(int* a,…

3分钟在移动盘上安装Ubuntu系统和ROS2

目录 原视频准备烧录 一个usb移动固态硬盘可以干什么呢&#xff1f; 可以用移动盘解决电脑存储空间不足的问题&#xff0c;可以用移动盘存储数据&#xff0c;可以用移动盘装其他系统当做双系统来使用&#xff0c;可以在一个移动固态硬盘里装两个甚至更多的系统… 下面&#xf…

《C++ primer plus》精炼(OOP部分)——对象和类(8)

学习是一项持续的投资&#xff0c;永远不会白费——本杰明富兰克林 文章目录 第13章&#xff1a;类继承一个基类和派生类公有继承的逻辑关系&#xff1a;is-a多态公有继承 第13章&#xff1a;类继承 一个基类和派生类 从一个类派生出另一个类时&#xff0c;原始类称为基类&am…

SLAM简要介绍

过去二十年&#xff0c;计算机视觉和机器学习领域都取得了很多进步。这一切都归功于硬件的改进&#xff0c;这使得研究人员和工程师能够设计和训练更复杂和更准确的模型&#xff0c;同时以以前难以想象的规模处理和分析数据。随着硬件的这些改进&#xff0c;未知环境的映射已经…

基于Java的学校固定资产管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

vue 使用 创建二维数组响应数据 渲染 echarts图标

目前我遇到的情况就是用动态的二维数组数据渲染echarts图标&#xff0c;我们从后端收到的接口一般是个一维数组&#xff0c;需要手动构建并且保证响应式。接下来我做了个案例 一、案例总逻辑 1. 先创建一个vue项目 2. 添加 echarts依赖 3. 模拟数据请求&#xff0c;构建二维数组…

支付宝2023年收单外包服务机构评级启动,截止11月15日

9月22日消息&#xff0c;支付宝近日发布公告称&#xff0c;已启动2023年收单外包服务机构评级工作。支付宝表示&#xff0c;收单外包服务机构评级工作是金融监管部门规范引导收单外包服务市场的重要举措&#xff0c;其结果将会向社会公示&#xff0c;直接关系到外包机构的业务开…

QT 之数据库 QSqlQuery CURD 实战

零、参考文档 https://doc.qt.io/archives/qt-6.0/qsqldatabase.html 一、开发环境 Ubuntu 20.04 QT6.0 Microsoft SQL Server 2022 Developer Edition (64-bit) 先修改 /etc/odbc.ini 的数据源配置&#xff0c;指定连接数据库 vdb&#xff0c; sudo vim /etc/odbc.ini[mss…

《发现的乐趣》作者费曼(读书笔记)

目录 一、书简介 二、作者理查德•费曼 费曼式思维 教育与传承 三、个人思考 四、笔记 科学家眼中的花之美 关于偏科 父亲教育我的方式 知道一个概念和真正懂得这个概念有很大区别 我没有义务去成全别人对我的期望 诺贝尔奖——够格吗&#xff1f; 探究世界的游戏规…

基于SpringBoot的商品物品产品众筹平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…