当前位置: 首页 > news >正文

ElasticSearch入门介绍和实战

目录

1.ElasticSearch简介

1.1 ElasticSearch(简称ES)

1.2 ElasticSearch与Lucene的关系

1.3 哪些公司在使用Elasticsearch

1.4 ES vs Solr比较

1.4.1 ES vs Solr 检索速度

2.  Lucene全文检索框架

2.1  什么是全文检索

2.2 分词原理之倒排索引

3.  Elasticsearch中的核心概念

3.1  索引 index

3.2  映射 mapping

3.3  字段Field

3.4  字段类型 Type

3.5  文档 document

3.6  集群 cluster

3.7  节点 node

3.8  分片和副本 shards&replicas

3.8.1  分片

3.8.2  副本

4.  安装Elasticsearch

4.1  安装Elasticsearch

4.1.1  创建普通用户

4.1.2  上传压缩包并解压

4.1.3  修改配置文件

4.1.3.1  修改elasticsearch.yml

4.1.3.2  修改jvm.option

4.2  启动时候常见问题

4.2.1  普通用户打开文件的最大数限制

4.2.2 此文件修改后需要重新登录用户,才会生效

4.2.3 普通用户调大虚拟内存

4.3  启动ES服务

5 客户端Kibana安装

6  安装IK分词器

7、指定IK分词器作为默认分词器

8.ES数据管理

8.1 ES数据管理概述

8.2 基本操作

9.Restful认识

10.查询操作 (*****)


1.ElasticSearch简介

1.1 ElasticSearch(简称ES)

Elasticsearch是用Java开发并且是当前最流行的开源的企业级搜索引擎。

能够达到实时搜索,稳定,可靠,快速,安装使用方便。

客户端支持Java、.NET(C#)、PHP、Python、Ruby等多种语言。

官方网站: https://www.elastic.co/

下载地址:https://www.elastic.co/cn/start

创始人:Shay Banon(谢巴农)

0

应用场景

0

1.2 ElasticSearch与Lucene的关系

Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库(框架)

但是想要使用Lucene,必须使用Java来作为开发语言并将其直接集成到你的应用中,并且Lucene的配置及使用非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

Lucene缺点:

   1)只能在Java项目中使用,并且要以jar包的方式直接集成项目中.

   2)使用非常复杂-创建索引和搜索索引代码繁杂

   3)不支持集群环境-索引数据不同步(不支持大型项目)   

   4)索引数据如果太多就不行,索引库和应用所在同一个服务器,共同占用硬盘.共用空间少.

上述Lucene框架中的缺点,ES全部都能解决.

1.3 哪些公司在使用Elasticsearch

1. 京东
2. 拼夕夕
3. 去哪儿
4. 58同城
5. 滴滴
6. 今日头条
7. 小米
8. 哔哩哔哩
9. 联想
10. GitHup
11. 微软
12. Facebook
等等...

1.4 ES vs Solr比较

1.4.1 ES vs Solr 检索速度

当单纯的对已有数据进行搜索时,Solr更快。

0

当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。

0

大型互联网公司,实际生产环境测试,将搜索引擎从Solr转到 Elasticsearch以后的平均查询速度有了50倍的提升。

0

总结:

二者安装都很简单。

1、Solr 利用 Zookeeper 进行分布式管理,而Elasticsearch 自身带有分布式协调管理功能。

2、Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。

3、Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。

4、Solr 是传统搜索应用的有力解决方案,但 Elasticsearch更适用于新兴的实时搜索应用。

1.4.2 ES vs 关系型数据库

0

2.  Lucene全文检索框架

2.1  什么是全文检索

全文检索是指:

  • 通过一个程序扫描文本中的每一个单词,针对单词建立索引,并保存该单词在文本中的位置、以及出现的次数
  • 用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文本位置、出现的次数返回给用户,因为有了具体文本的位置,所以就可以将具体内容读取出来了

hello what world      ====>     hello

                                                what

                                                world

2.2 分词原理之倒排索引

0

0

0

倒排索引总结:

索引就类似于目录,平时我们使用的都是索引,都是通过主键定位到某条数据,那么倒排索引呢,刚好相反,数据对应到主键.这里以一个博客文章的内容为例:

1.索引

文章ID

文章标题

文章内容

1

浅析JAVA设计模式

JAVA设计模式是每一个JAVA程序员都应该掌握的进阶知识

2

JAVA多线程设计模式

JAVA多线程与设计模式结合

2.倒排索引

假如,我们有一个站内搜索的功能,通过某个关键词来搜索相关的文章,那么这个关键词可能出现在标题中,也可能出现在文章内容中,那我们将会在创建或修改文章的时候,建立一个关键词与文章的对应关系表,这种,我们可以称之为倒排索引,因此倒排索引,也可称之为反向索引.如:

关键词

文章ID

JAVA

1

设计模式

1,2

多线程

2

注:这里涉及中文分词的问题

3.  Elasticsearch中的核心概念

3.1  索引 index

一个索引就是一个拥有几分相似特征的文档的集合。比如说,可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引

一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字

3.2  映射 mapping

 ElasticSearch中的映射(Mapping)用来定义一个文档

mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分词器、是否被索引等等,这些都是映射里面可以设置的

3.3  字段Field

相当于是数据表的字段|列

3.4  字段类型 Type

每一个字段都应该有一个对应的类型,例如:Text、Keyword、Byte等

3.5  文档 document

一个文档是一个可被索引的基础信息单元,类似一条记录。文档以JSON(Javascript Object Notation)格式来表示;

3.6  集群 cluster

一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能

3.7  节点 node

一个节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能

 一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中

这意味着,如果在网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中

 在一个集群里,可以拥有任意多个节点。而且,如果当前网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。

3.8  分片和副本 shards&replicas

3.8.1  分片
  • 一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢
  • 为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫做分片
  • 当创建一个索引的时候,可以指定你想要的分片的数量
  • 每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上
  • 分片很重要,主要有两方面的原因

  允许水平分割/扩展你的内容容量

允许在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量

  • 至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户来说,这些都是透明的
3.8.2  副本
  • 在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做副本分片,或者直接叫副本
  • 副本之所以重要,有两个主要原因

1)  在分片/节点失败的情况下,提供了高可用性。

注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的

2) 扩展搜索量/吞吐量,因为搜索可以在所有的副本上并行运行

每个索引可以被分成多个分片。一个索引有0个或者多个副本

一旦设置了副本,每个索引就有了主分片和副本分片,分片和副本的数量可以在索引

创建的时候指定

在索引创建之后,可以在任何时候动态地改变副本的数量,但是不能改变分片的数量

4.  安装Elasticsearch

4.1  安装Elasticsearch

4.1.1  创建普通用户

ES不能使用root用户来启动,必须使用普通用户来安装启动。这里我们创建一个普通用户以及定义一些常规目录用于存放我们的数据文件以及安装包等。

创建一个es专门的用户(必须)

# 使用root用户在服务器执行以下命令

先创建组, 再创建用户:
1)创建 elasticsearch 用户组
[root@localhost ~]# groupadd elasticsearch2)创建用户 eoi并设置密码
[root@localhost ~]# useradd eoi
[root@localhost ~]# passwd eoi3)# 创建es文件夹,
并修改owner为eoi用户
mkdir -p /usr/local/es4)用户es 添加到 elasticsearch 用户组
[root@localhost ~]# usermod -G elasticsearch eoi
[root@localhost ~]# chown -R eoi /usr/local/es/elasticsearch-7.6.15)设置sudo权限
#为了让普通用户有更大的操作权限,我们一般都会给普通用户设置sudo权限,方便普通用户的操作
#三台机器使用root用户执行visudo命令然后为es用户添加权限
[root@localhost ~]# visudo#在root ALL=(ALL) ALL 一行下面
#添加eoi用户 如下:
eoiALL=(ALL) ALL#添加成功保存后切换到eoi用户操作[root@localhost ~]# su eoi
[eoi@localhost root]$
4.1.2  上传压缩包并解压

将es的安装包下载并上传到服务器的/user/local/es路径下,然后进行解压

使用eoi用户来执行以下操作,将es安装包上传到指定服务器,并使用es用户执行以下命令解压。

# 解压Elasticsearch
su eoi
cd /user/local/
tar -zvxf elasticsearch-7.6.1-linux-x86_64.tar.gz -C /usr/local/es/
4.1.3  修改配置文件
4.1.3.1  修改elasticsearch.yml

进入服务器使用eoi用户来修改配置文件

cd /usr/local/es/elasticsearch-7.6.1/config
mkdir -p /usr/local/es/elasticsearch-7.6.1/log
mkdir -p /usr/local/es/elasticsearch-7.6.1/data
rm -rf elasticsearch.ymlvim elasticsearch.yml
cluster.name: eoi-es
node.name: node1
path.data: /usr/local/es/elasticsearch-7.6.1/data
path.logs: /usr/local/es/elasticsearch-7.6.1/log
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["服务器IP"]
cluster.initial_master_nodes: ["节点名"]
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
http.cors.enabled: true
http.cors.allow-origin: "*"
4.1.3.2  修改jvm.option

修改jvm.option配置文件,调整jvm堆内存大小

使用eoi用户执行以下命令调整jvm堆内存大小,每个人根据自己服务器的内存大小来进行调整。

cd /usr/local/es/elasticsearch-7.6.1/config
vim jvm.options
-Xms2g
-Xmx2g

4.2  启动时候常见问题

由于现在使用普通用户来安装es服务,且es服务对服务器的资源要求比较多,包括内存大小,线程数等。所以我们需要给普通用户解开资源的束缚

4.2.1  普通用户打开文件的最大数限制

问题错误信息描述:

max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

ES因为需要大量的创建索引文件,需要大量的打开系统的文件,所以我们需要解除linux系统当中打开文件最大数目的限制,不然ES启动就会抛错

三台机器使用eoi用户执行以下命令解除打开文件数据的限制

sudo vi /etc/security/limits.conf

添加如下内容: 注意*不要去掉了

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
4.2.2 此文件修改后需要重新登录用户,才会生效

普通用户启动线程数限制

问题错误信息描述

max number of threads [1024] for user [es] likely too low, increase to at least [4096]

修改普通用户可以创建的最大线程数

max number of threads [1024] for user [es] likely too low, increase to at least [4096]原因:无法创建本地线程问题,用户最大可创建线程数太小解决方案:修改90-nproc.conf 配置文件。

三台机器使用eoi用户执行以下命令修改配置文件

Centos6
sudo vi /etc/security/limits.d/90-nproc.conf
Centos7
sudo vi /etc/security/limits.d/20-nproc.conf

找到如下内容:

* soft nproc 1024#修改为
* soft nproc 4096
4.2.3 普通用户调大虚拟内存

错误信息描述:

max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

调大系统的虚拟内存

原因:最大虚拟内存太小

每次启动机器都手动执行下。

三台机器执行以下命令

编辑 /etc/sysctl.conf,追加以下内容:vm.max_map_count=262144 保存后,执行:sysctl -p

备注:以上三个问题解决完成之后,重新连接secureCRT或者重新连接xshell生效

4.3  启动ES服务

三台机器使用eoi用户执行以下命令启动es服务

nohup /usr/local/es/elasticsearch-7.6.1/bin/elasticsearch 2>&1 &

后台启动ES 进入bin目录 ./elasticsearch -d

启动成功之后jsp即可看到es的服务进程,并且访问页面

http://192.168.21.130:9200/?pretty

能够看到es启动之后的一些信息

注意:如果哪一台机器服务启动失败,那么就到哪一台机器的

/usr/local/es/elasticsearch-7.6.1/log

这个路径下面去查看错误日志

关闭Linux防火墙
永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off
即时生效,重启后复原
开启: service iptables start
关闭: service iptables stop

注意:启动ES的时候出现 Permission denied

原因:当前的用户没有对XX文件或目录的操作权限

5 客户端Kibana安装

5.1客户端可以分为图形界面客户端,和代码客户端.

5.2 ES主流客户端Kibana,开放9200端口与图形界面客户端交互

1)下载Kibana放之/usr/local/es目录中

2)解压文件:tar -zxvf kibana-X.X.X-linux-x86_64.tar.gz

3)进入/usr/local/es/kibana-X.X.X-linux-x86_64/config目录

4)使用vi编辑器:vi kibana.yml

server.port: 5601
server.host: "服务器IP"
elasticsearch.hosts: ["http://IP:9200"]  #这里是elasticsearch的访问地址

5)启动Kibana

/usr/local/es/kibana-7.6.1-linux-x86_64/bin/kibana

后台启动kibana

nohup ./kibana &

6)访问Kibana

http://ip:5601/app/kibana

6  安装IK分词器

我们后续也需要使用Elasticsearch来进行中文分词,所以需要单独给Elasticsearch安装IK分词器插件。以下为具体安装步骤:

下载Elasticsearch IK分词器

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

切换到eoi用户,并在es的安装目录下/plugins创建ik

mkdir -p /usr/local/es/elasticsearch-7.6.1/plugins/ik

将下载的ik分词器上传并解压到该目录

cd /usr/local/es/elasticsearch-7.6.1/plugins/ik
unzip  elasticsearch-analysis-ik-7.6.1.zip 

重启Elasticsearch,测试分词效果

POST _analyze
{
"analyzer":"standard",
"text":"我爱你中国"
}
POST _analyze
{
"analyzer": "ik_smart",
"text": "中华人民共和国"}
#ik_smart:会做最粗粒度的拆分
POST _analyze
{
"analyzer":"ik_max_word",
"text":"我爱你中国"
}
#ik_max_word:会将文本做最细粒度的拆分

7、指定IK分词器作为默认分词器

ES的默认分词设置是standard,这个在中文分词时会单字拆分,比如搜索关键词“清华大学”,这时候会按“清”,“华”,“大”,“学”去分词,然后搜出来的都是些“清清的河水”,“中华儿女”,“地大物博”,“学而不思则罔”之类的莫名其妙的结果,这里我们就想把这个分词方式修改一下,于是呢,就想到了ik分词器,有两种ik_smart和ik_max_word。

ik_smart会将“清华大学”整个分为一个词,而ik_max_word会将“清华大学”分为“清华大学”,“清华”和“大学”,按需选其中之一就可以了。

修改默认分词方法(这里修改school_index索引的默认分词为:ik_max_word):

PUT /school_index
{
"settings" : {
"index" : {
"analysis.analyzer.default.type": "ik_max_word"
}
}
}

8.ES数据管理

8.1 ES数据管理概述

ES是面向文档(document oriented)的,这意味着它可以存储整个对象或文档(document)。

然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。

在ES中,你可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤。

ES使用JSON作为文档序列化格式。

JSON现在已经被大多语言所支持,而且已经成为NoSQL领域的标准格式。

ES存储的一个员工文档的格式示例:

{
"email": "584614151@qq.com",
"name": "张三","age": 30,"interests": [ "篮球", "王者荣耀" ]}

8.2 基本操作

1) 创建索引

格式: PUT /索引名称

举例: PUT /es_db

2) 查询索引

格式: GET /索引名称

举例: GET /es_db

3) 删除索引

格式: DELETE /索引名称

举例: DELETE /es_db

4) 添加文档

格式: PUT /索引名称/类型/id

举例: 
PUT /es_db/_doc/1
{
"name": "张三",
"sex": 1,
"age": 25,
"address": "北京国家森林公园",
"remark": "java developer"
}PUT /es_db/_doc/2
{
"name": "李四",
"sex": 1,
"age": 28,
"address": "广州荔湾大厦",
"remark": "java assistant"
}PUT /es_db/_doc/3
{
"name": "小王",
"sex": 0,
"age": 26,
"address": "上海外滩",
"remark": "php developer"
}PUT /es_db/_doc/4
{
"name": "admin",
"sex": 0,
"age": 22,
"address": "北京颐和园",
"remark": "python assistant"
}PUT /es_db/_doc/5
{
"name": "小李",
"sex": 0,
"age": 19,
"address": "西安大唐不夜城",
"remark": "java architect assistant"
}

5) 修改文档

格式: PUT /索引名称/类型/id
举例: 
PUT /es_db/_doc/1
{
"name": "北京",
"sex": 1,
"age": 75,
"address": "北京天安门",
"remark": "php developer assistant"				
}

注意:POST和PUT都能起到创建/更新的作用

1、需要注意的是==PUT==需要对一个具体的资源进行操作也就是要确定id才能进行==更新/创建,而==POST==是可以针对整个资源集合进行操作的,如果不写id就由ES生成一个唯一id进行==创建==新文档,如果填了id那就针对这个id的文档进行创建/更新

2、PUT只会将json数据都进行替换, POST只会更新相同字段的值

3、PUT与DELETE都是幂等性操作, 即不论操作多少次, 结果都一样

6) 查询文档

格式: GET /索引名称/类型/id
举例: GET /es_db/_doc/1

7) 删除文档

格式: DELETE /索引名称/类型/id
举例: DELETE /es_db/_doc/1

9.Restful认识

Restful是一种面向资源的架构风格,可以简单理解为:使用URL定位资源,用HTTP动词(GET,POST,DELETE,PUT)描述操作。 基于Restful API ES和所有客户端的交互都是使用JSON格式的数据.

其他所有程序语言都可以使用RESTful API,通过9200端口的与ES进行通信

GET查询

PUT添加

POST修改

DELE删除

用户做crud

Get http://localhost:8080/employee/1   Get http://localhost:8080/employeesput http://localhost:8080/employee
{}
delete http://localhost:8080/employee/1Post http://localhost:8080/employee/1
{
}

使用Restful的好处:

透明性,暴露资源存在。

充分利用 HTTP 协议本身语义,不同请求方式进行不同的操作

10.查询操作 (*****)

10.1 查询当前类型中的所有文档 _search

格式: GET /索引名称/类型/_search
举例: GET /es_db/_doc/_search
SQL:  select * from student

10.2 条件查询, 如要查询age等于28岁的 _search?q=*:***

格式: GET /索引名称/类型/_search?q=*:***
举例: GET /es_db/_doc/_search?q=age:28
SQL:  select * from student where age = 28

10.3 范围查询, 如要查询age在25至26岁之间的 _search?q=***[** TO **]  注意: TO 必须为大写

格式: GET /索引名称/类型/_search?q=***[25 TO 26]
举例: GET /es_db/_doc/_search?q=age[25 TO 26]
SQL:  select * from student where age between 25 and 26

10.4 根据多个ID进行批量查询 _mget

格式: GET /索引名称/类型/_mget
举例: GET /es_db/_doc/_mget 
{"ids":["1","2"]  }
SQL:  select * from student where id in (1,2)	

10.5 查询年龄小于等于28岁的 :

格式: GET /索引名称/类型/_search?q=age:<=**
举例: GET /es_db/_doc/_search?q=age:<=28
SQL:  select * from student where age <= 28

10.6 查询年龄大于28前的 :>

格式: GET /索引名称/类型/_search?q=age:>**
举例: GET /es_db/_doc/_search?q=age:>28
SQL:  select * from student where age > 28

10.7 分页查询 from=*&size=*

格式: GET /索引名称/类型/_search?q=age[25 TO 26]&from=0&size=1
举例: GET /es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1
SQL:  select * from student where age between 25 and 26 limit 0, 1 

10.8 对查询结果只输出某些字段 _source=字段,字段

格式: GET /索引名称/类型/_search?_source=字段,字段
举例: GET /es_db/_doc/_search?_source=name,age
SQL:  select name,age from student

10.9 对查询结果排序 sort=字段:desc/asc

格式: GET /索引名称/类型/_search?sort=字段 desc
举例: GET /es_db/_doc/_search?sort=age:desc
SQL:  select * from student order by age desc

相关文章:

ElasticSearch入门介绍和实战

目录 1.ElasticSearch简介 1.1 ElasticSearch&#xff08;简称ES&#xff09; 1.2 ElasticSearch与Lucene的关系 1.3 哪些公司在使用Elasticsearch 1.4 ES vs Solr比较 1.4.1 ES vs Solr 检索速度 2. Lucene全文检索框架 2.1 什么是全文检索 2.2 分词原理之倒排索引…...

【FPGA】分享一些FPGA视频图像处理相关的书籍

在做FPGA工程师的这些年&#xff0c;买过好多书&#xff0c;也看过好多书&#xff0c;分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…...

AUTOSAR从入门到精通-车载以太网(四)

目录 前言 原理 车载以太网发展历史 为何选择车载以太网...

MySQL报错:1054 - Unknown column ‘xx‘ in ‘field list的解决方法

我在操作MySQL遇到1054报错&#xff0c;报错内容&#xff1a;1054 - Unknown column Cindy in field list&#xff0c;下面演示解决方法&#xff0c;非常简单。 根据箭头指示&#xff0c;Cindy对应的应该是VARCHAR文本数字类型&#xff0c;字符串要用引号&#xff0c;所以解决方…...

【Android 13】使用Android Studio调试系统应用之Settings移植(四):40+个依赖子模块之ActionBarShadow

文章目录 一、篇头二、系列文章2.1 Android 13 系列文章2.2 Android 9 系列文章2.3 Android 11 系列文章三、子模块AS移植3.1 AS创建目标3.2 创建ActionBarShadow(1)使用VS Code打开org_settings/SettingsLib目录(2)ActionBarShadow的Manifest.xml(3)ActionBarShadow的An…...

nosql-redis整合测试

nosql-redis整合测试 1、创建项目并导入redis2、配置redis3、写测试类4、在redis中创建key5、访问80826、在集成测试中测试方法 1、创建项目并导入redis 2、配置redis 3、写测试类 4、在redis中创建key 5、访问8082 6、在集成测试中测试方法 package com.example.boot3.redis;…...

智能化中的控制与自动化中的控制不同

智能化中的控制相对于自动化中的控制更加灵活、智能、综合和学习能力强。智能化控制系统能够根据实际情况进行自主决策和优化&#xff0c;适用范围更广&#xff0c;效果更好。 首先&#xff0c;智能化控制系统能够根据外部环境的变化和实时数据的反馈来自主调整和优化控制策略&…...

java练习题之多态练习

1&#xff1a;关于多态描述错误的是(D) A. 父类型的引用指向不同的子类对象 B. 用引用调用方法&#xff0c;只能调用引用中声明的方法 C. 如果子类覆盖了父类中方法&#xff0c;则调用子类覆盖后的方法 D. 子类对象类型会随着引用类型的改变而改变 2&#xff1a;class Supe…...

[原创][R语言]股票分析实战[4]:周级别涨幅趋势的相关性

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…...

esp32使用lvgl,给图片取模显示图片

使用LVGL官方工具。 https://lvgl.io/tools/imageconverter 上传图片&#xff0c;如果想要透明效果&#xff0c;那么选择 输出格式C array&#xff0c;点击Convert进行转换。 下载.c文件放置到工程下使用即可。...

R语言使用scitb包10分钟快速绘制论文基线表

scitb包目前进行了升级到1.7版本了&#xff0c;我做了一个操作视频&#xff0c;如何快速绘制基线表。 scitb包绘制基线表 可以配套看下我的关于scitb包文章理解一下 scitb包1.6版本发布&#xff0c;一个为制作专业统计表格而生的R包...

类和对象

1 类定义&#xff1a; class ChecksumAccumulator {// class definition goes here } 你就能创建 ChecksumAccumulator 对象&#xff1a;new CheckSumAccumulator 注&#xff1a;1scala类中成员默认是public类型&#xff0c;若设为私有属性则必须加private关键字。在scala中是…...

Py之tensorflow-addons:tensorflow-addons的简介、安装、使用方法之详细攻略

Py之tensorflow-addons&#xff1a;tensorflow-addons的简介、安装、使用方法之详细攻略 目录 tensorflow-addons的简介 tensorflow-addons的安装 tensorflow-addons的使用方法 1、使用 TensorFlow Addons 中的功能&#xff1a; tensorflow-addons的简介 TensorFlow Addon…...

STM32G4x FLASH 读写配置结构体(LL库下使用)

主要工作就是把HAL的超时用LL库延时替代&#xff0c;保留了中断擦写模式、轮询等待擦写&#xff0c;我已经验证了部分。 笔者用的芯片为STM32G473CBT6 128KB Flash&#xff0c;开环环境为CUBEMXMDK5.32&#xff0c;因为G4已经没有标准库了&#xff0c;笔者还是习惯使用标准库的…...

【AI提示词人物篇】创新艺术未来,让科技改变想象空间

AI 绘画学习难度和练习技巧 学习绘画的技巧 学习能难度&#xff1a; 外貌特征&#xff1a;AI需要学习识别和理解各种外貌特征&#xff0c;如发型、肤色、眼睛颜色等。这可能需要大量的训练数据和复杂的模型架构。 镜头提示&#xff1a;AI需要学习理解不同镜头提示的含义&…...

登录shell与非登录shell、交互式与非交互式shell的知识点详细总结

一、登录shell与非登录shell 1.登录shell定义&#xff1a;指的是当用户登录系统时所取的那个shell&#xff0c;登录shell属于交互式shell。 登陆shell通常指的是&#xff1a;用户通过输入用户名/密码&#xff08;或证书认证&#xff09;后启动的shell.例如&#xff1a; 当时…...

【教学类-42-02】20231224 X-Y 之间加法题判断题2.0(按2:8比例抽取正确题和错误题)

作品展示&#xff1a; 0-5&#xff1a; 21题&#xff0c;正确21题&#xff0c;错误21题42题 。小于44格子&#xff0c;都写上&#xff0c;哪怕输入2:8&#xff0c;实际也是5:5 0-10 66题&#xff0c;正确66题&#xff0c;错误66题132题 大于44格子&#xff0c;正确66题抽取44*…...

轻量Http客户端工具VSCode和IDEA

文章目录 前言Visual Studio Code 的插件 REST Client编写第一个案例进阶&#xff0c;设置变量进阶&#xff0c;设置Token IntelliJ IDEA 的 HTTP请求构建http脚本HTTP的环境配置结果值暂存 前言 作为一个WEB工程师&#xff0c;在日常的使用过程中&#xff0c;HTTP请求是必不可…...

机器学习或深度学习的数据读取工作(大数据处理)

机器学习或深度学习的数据读取工作&#xff08;大数据处理&#xff09;主要是.split和re.findall和glob.glob运用。 读取文件的路径&#xff08;为了获得文件内容&#xff09;和提取文件路径中感兴趣的东西(标签) 1&#xff0c;“glob.glob”用于读取文件路径 2&#xff0c;“.…...

Rust 生命周期

Rust 第17节 生命周期 先看一段错误代码 /* //一段错误的代码 // Rust 编译时会报错&#xff1b; */let r;{let x 5;r &x;}println!("{}",r);Rust 在编译时使用 借用检查器&#xff0c; 比较作用域来检查所有的借用是否合法&#xff1b; 很明显&#xff1b;r…...

【论文解读】CNN-Based Fast HEVC Quantization Parameter Mode Decision

时间&#xff1a;2019 年 级别&#xff1a;SCI 机构&#xff1a;南京信息工程大学 摘要 随着多媒体呈现技术、图像采集技术和互联网行业的发展&#xff0c;远程通信的方式已经从以前的书信、音频转变为现在的音频/视频。和 视频在工作、学习和娱乐中的比例不断提高&#xff0…...

在Linux上安装CLion

本教程将指导你如何在Linux系统上安装CLion&#xff0c;下载地址为&#xff1a;https://download.jetbrains.com.cn/cpp/CLion-2022.3.3.tar.gz。以下是详细的安装步骤&#xff1a; 步骤1&#xff1a;下载CLion 首先&#xff0c;你需要使用wget命令从提供的URL下载CLion的tar…...

R语言贝叶斯网络模型、INLA下的贝叶斯回归、R语言现代贝叶斯统计学方法、R语言混合效应(多水平/层次/嵌套)模型

目录 ㈠ 基于R语言的贝叶斯网络模型的实践技术应用 ㈡ R语言贝叶斯方法在生态环境领域中的高阶技术应用 ㈢ 基于R语言贝叶斯进阶:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析 ㈣ 基于R语言的现代贝叶斯统计学方法&#xff08;贝叶斯参数估…...

多维时序 | Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多变量时间序列预测

多维时序 | Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多变量时间序列预测 目录 多维时序 | Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现PSO-GCNN粒子群优化分组卷积神经网络多…...

Oracle 学习(1)

Oracle简介 Oracle是殷墟&#xff08;yīn Xu&#xff09;出土的甲骨文&#xff08;oracle bone inscriptions&#xff09;的英文翻译的第一个单词&#xff0c;在英语里是“神谕”的意思。Oracle公司成立于1977年&#xff0c;总部位于美国加州&#xff0c;是世界领先的信息管…...

华为HCIA认证H12-811题库新增

801、[单选题]178/832、在系统视图下键入什么命令可以切换到用户视图? A quit B souter C system-view D user-view 试题答案&#xff1a;A 试题解析&#xff1a;在系统视图下键入quit命令退出到用户视图。因此答案选A。 802、[单选题]“网络管理员在三层交换机上创建了V…...

Nginx Unit 1.27.0 发布

目录 介绍 更新内容 将 HTTP 请求重定向到 HTTPS 为纯路径 URI 提供可配置的文件名 完整的更新日志 其他 平台更新 介绍 Nginx Unit 是一个动态应用服务器&#xff0c;能够与 Nginx Plus 和 Nginx 开源版并行或独立运行。Nginx Unit 支持 RESTful JSON API&#xff0c;…...

【影像组学入门百问】#32—#34

#32-影像组学研究过程中&#xff0c;图像重采样参 数怎么选择&#xff1f; 在影像组学研究过程中&#xff0c;选择合适的图像重采样参数对于保证分析质量和准确性至关重要。以下是在选择图像重采样参数时需要考虑的一些建议&#xff1a; 1.目标分辨率&#xff1a;首先&#…...

YOLOv5代码解析——yolo.py

yolo.py的主要功能是构建模型。 1、最主要的函数是parse_model&#xff0c;用于解析yaml文件&#xff0c;并根据解析的结果搭建网络。这个函数的注释如下&#xff1a; def parse_model(d, ch): # model_dict, input_channels(3)"""解析模型文件&#xff0c;并…...

4种feature classification在代码的实现上是怎么样的?Linear / MLP / CNN / Attention-Based Heads

具体的分类效果可以看&#xff1a;【Arxiv 2023】Diffusion Models Beat GANs on Image Classification 1、线性分类器 (Linear, A) 使用一个简单的线性层&#xff0c;通常与一个激活函数结合使用。 import torch.nn as nnclass LinearClassifier(nn.Module):def __init__(se…...

最新Unity DOTS Physics物理引擎碰撞事件处理

最近DOTS发布了正式的版本,同时基于DOTS的理念实现了一套高性能的物理引擎&#xff0c;今天我们给大家分享和介绍一下这个物理引擎的碰撞事件处理以及核心相关概念。 Unity.Physics物理引擎的主要流程与Pipeline Unity.Physics物理引擎做仿真迭代计算的时候主要通过以下步骤来…...

springboot集成websocket全全全!!!

一、界面展示 二、前置了解 1.什么是websocket WebSocket是一种在单个TCP连接上进行全双工通信的持久化协议。 全双工协议就是客户端可以给我们服务器发数据 服务器也可以主动给客户端发数据。 2.为什么有了http协议 还要websocket 协议 http协议是一种无状态&#xff0c;非…...

SpringMVC:整合 SSM 中篇

文章目录 SpringMVC - 04整合 SSM 中篇一、优化二、总结三、说明注意&#xff1a; SpringMVC - 04 整合 SSM 中篇 一、优化 在 spring-dao.xml 中配置 dao 接口扫描&#xff0c;可以动态地实现 dao 接口注入到 Spring 容器中。 优化前&#xff1a;手动创建 SqlSessionTempl…...

oracle即时客户端(Instant Client)安装与配置

之前的文章记录了oracle客户端和服务端的下载与安装&#xff0c;内容参见&#xff1a; 在Windows中安装Oracle_windows安装oracle 如果不想安装oracle客户端&#xff08;或者是电脑因为某些原因无法安装oracle客户端&#xff09;&#xff0c;还想能够连接oracle远程服务&#…...

POP3协议详解

基本介绍 POP3是一种用于从邮件服务器获取电子邮件的协议。它允许邮件客户端连接到邮件服务器&#xff0c;检索服务器上存储的邮件&#xff0c;并将邮件下载到客户端设备上。POP3的工作原理如下&#xff1a; 连接和身份验证&#xff1a; 邮件客户端通过TCP/IP连接到邮件服务器…...

电子病历编辑器源码,提供电子病历在线制作、管理和使用的一体化电子病历解决方案

概述&#xff1a; 电子病历是指医务人员在医疗活动过程中,使用医疗机构信息系统生成的文字、符号、图表、图形、数据、影像等数字化信息,并能实现存储、管理、传输和重现的医疗记录,是病历的一种记录形式。 医院通过电子病历以电子化方式记录患者就诊的信息&#xff0c;包括&…...

WT2605C高品质音频蓝牙语音芯片:外接功放实现双声道DAC输出的优势

在音频处理领域&#xff0c;双声道DAC输出能够提供更为清晰、逼真的音效&#xff0c;增强用户的听觉体验。针对这一需求&#xff0c;唯创知音的WT2605C高品质音频蓝牙语音芯片&#xff0c;通过外接功放实现双声道DAC输出&#xff0c;展现出独特的应用优势。 一、高品质音频处理…...

IntelliJ IDEA 2023.3 最新版如何如何配置?IntelliJ IDEA 2023.3 最新版试用方法

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

如何查看内存卡使用记录-查看的设备有:U盘、移动硬盘、MP3、SD卡等-供大家学习研究参考

主要功能 USB Viewer&#xff08;USB移动存储设备使用记录查看器&#xff09;可用于查看本机的USB移动存储设备使用记录。可查看的设备有&#xff1a;U盘、移动硬盘、MP3、SD卡……等。   可用于兵器、航空、航天、政府、军队等对保密要求较高的单位&#xff0c;可在计算机保…...

九、W5100S/W5500+RP2040之MicroPython开发<HTTPOneNET示例>

文章目录 1. 前言2. 平台操作流程2.1 创建设备2.2 创建数据流模板 3. WIZnet以太网芯片4. 示例讲解以及使用4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 烧录验证 5. 注意事项6. 相关链接 1. 前言 在这个智能硬件和物联网时代&#xff0c;MicroPython和树莓派PICO正…...

在 Laravel 中,清空缓存大全

在 Laravel 中&#xff0c;清空缓存通常涉及到清除应用程序中的缓存文件和数据库查询缓存。以下是一些常用的清空缓存方法&#xff1a; 1. 清除路由缓存&#xff1a; Laravel 的路由缓存可以提高应用程序的性能&#xff0c;但在开发过程中&#xff0c;你可能需要频繁地更改路…...

【贪心】单源最短路径Python实现

文章目录 [toc]问题描述Dijkstra算法Dijkstra算法的正确性贪心选择性质最优子结构性质 Dijkstra算法应用示例时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;贪心算法 问题描述 给定一个带权有向图 G ( V , E ) G (V , E) G(V,E)&#xff0c;其中每…...

Spark Shell的简单使用

简介 Spark shell是一个特别适合快速开发Spark原型程序的工具&#xff0c;可以帮助我们熟悉Scala语言。即使你对Scala不熟悉&#xff0c;仍然可以使用这个工具。Spark shell使得用户可以和Spark集群交互&#xff0c;提交查询&#xff0c;这便于调试&#xff0c;也便于初学者使用…...

Springsecurty【2】认证连接MySQL

1.前期准备 基于Spring Initializr创建SpringBoot项目&#xff08;基于SpringBoot 2.7.12版本&#xff09;&#xff0c;实现与MyBatisPlus的项目整合。分别导入&#xff1a;CodeGenerator和MyBatisPlusConfig。 CodeGenerator&#xff1a;用于MybatisPlus代码生成&#xff1b;…...

.Net 访问电子邮箱-LumiSoft.Net,好用

序言&#xff1a; 网上找了很多关于.Net如何访问电子邮箱的方法&#xff0c;但是大多数都达不到想要的需求&#xff0c;只有一些 收发邮件。因此 花了很大功夫去看 LumiSoft.Net.dll 的源码&#xff0c;总算做出自己想要的结果了&#xff0c;果然学习诗人进步。 介绍&#xff…...

谷粒商城-商品服务-新增商品功能开发(商品图片无法展示问题没有解决)

在网关配置路由 - id: member_routeuri: lb://gulimemberpredicates:- Path/api/gulimember/**filters:- RewritePath/api/(?<segment>.*),/$\{segment}并将所有逆向生成的工程调式出来 获取分类关联的品牌 例如&#xff1a;手机&#xff08;分类&#xff09;-> 品…...

Open3D 点云数据处理基础(Python版)

Open3D 点云数据处理基础&#xff08;Python版&#xff09; 文章目录 1 概述 2 安装 2.1 PyCharm 与 Python 安装 2.3 Anaconda 安装 2.4 Open3D 0.13.0 安装 2.5 新建一个 Python 项目 3 点云读写 4 点云可视化 2.1 可视化单个点云 2.2 同一窗口可视化多个点云 2.3…...

使用vue-qr,报错in ./node_modules/vue-qr/dist/vue-qr.js

找到node_modules—>vue-qr/dist/vue-qr.js文件&#xff0c;搜…e,将…去掉&#xff0c;然后重新运行项目。...

百川2大模型微调问题解决

之前用https://github.com/FlagAlpha/Llama2-Chinese微调过几个模型&#xff0c;总体来说llama2的生态还是比较好的&#xff0c;过程很顺利。微调百川2就没那么顺利了&#xff0c;所以简单做个记录 1. 数据准备&#xff0c;我的数据是单轮对话&#xff0c;之前微调llama2已经按…...

MySQL的事务-原子性

MySQL的事务处理具有ACID的特性&#xff0c;即原子性&#xff08;Atomicity)、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;和持久性&#xff08;Durability&#xff09;。 1. 原子性指的是事务中所有操作都是原子性的&#xff0c;要…...