elasticsearch 基础

ES 搜索技术历史

今天看的是《Elasticsearch实战与原理解析》 第一章 搜索技术发展史

1、搜索技术发展史

宏观而言,搜索引擎的发展经历了五个尖端和两大分类。五个阶段分别是ftp文件检索阶段、分类目录阶段、文本相关性检索阶段、网页链接分析阶段和用户意图识别阶段。

ftp文件检索阶段:索索引擎质检所多个ftp服务器山存储的文件,用户搜索是需要输入精准的文件名来搜索。搜索引擎会告诉用户从哪一个ftp服务器下载。

分类目录阶段:该阶段搜索引擎是一个导航网站,网站中国都是湾沚的分类陈列,用户在互联网上常用的湾沚在这里都有,到现在,这种类型的网站依旧存在。

文本相关性检索阶段:该阶段引入了全文搜索技术,主要是为了解决网络信息骤增带来的检索到的信息不准。用户将菽粟的查询信息交给搜索引擎后台服务器,搜索引擎服务器通过查询已经素银好的网页,返回一些相关性好的网页信息。

网页链接分析阶段:该阶段的搜索引擎使用的网站链接形式与当前基本相同,在该阶段,外部链接表示推荐。这一阶段的代表是谷歌。目前,网页链接分析算法和改进优化的版本在主流搜索引擎中国大行其道。

用户意图识别阶段:该阶段的搜索引起以用户为中心作为设计的初心,搜索引擎力求理解每一位用户的真正诉求,力求做到千人千面,追求葛新华识别和反馈。这一阶段的代表是百度。

两大分类是:站内搜索和站外搜索。

简单来说,站内搜索就是在一个网站中进行检索,如在京东商城中的搜索某个物品, 推荐出的东西都是在京东商城中出现的;站外搜索一般来说都是在整个生态中的搜索,如 使用百度搜索,他会推荐出相似度较高的某些链接给你。

2、Elasticsearch简介

Elasticsearch是一个分布式、可扩展、近实时的高性能搜索和数据分析引擎。它提供了搜索、分析、存储数据的三个功能 。

其主要特点:分布式、量配置、开箱即用、自动发现、索引分片、索引副本机制、支持restful接口、多数据源、自动索引负载。

它是在lucene的基础上做的封装。

3、lucene简介

lucene是一个免费 、开源、高性能、纯java编写的全文搜索引擎。

其主要特点:

索引文件格式独立于应用平台:定义了一套以8字节为基础的索引文件格式,兼容各个平台、

索引速度快:在传统的全文索引的倒排序索引的基础上,实现了分块索引,能够对新的 文件建立小文件索引,提升索引速度、

简单易学:优秀的面向对象的系统架构,减低了lucene的学习难度、

跨语言:设计了独立于预约和文件格式的文本分析接口,索引器通过接受token留完成索引文件的创立,用户扩展的语言和文件格式,只需要实现文件分析的接口即可、

强大的搜索引擎:lucene默认实现了一套签到的查询引擎,用户无需自己编写代码即可通过文件获得强大的查询能力。lucene实现了布尔操作、模糊查询、分组查询等。

lucene主要模块:

Analysis模块:主要负责词法分析和语言处理。也就是分词通过该模块,最终新城存储或者查询的最小单元term

index模块:索引的创建工作

store模块:负责索引的读写 主要是对文件的一些操作,主要目的是抽象出和平台文件系统无关的存储

QueryParser模块:负责语法分析 把查询语句生成lucene底层识别的条件

Search模块:负责对索引的搜索

Similarily模块:负责相关性打分和排序的实现。

第二章 搜索技术基础知识(一)

数据搜索方式。

搜索引擎主要对数据进行搜索,而在牙发过程中不拿发现数据有两种类型。即结构化和非急死结构化数据。
对软件研发人员来说,在做数据车计划时,对数据的结构化感知会非常强烈。如结构化数据一般我们会放在光起型数据库。这是因为结构化数据有固定的数据格式和有限的。长度,因此可以通过二维化的表格来承载它。

而非结构化数据一般会存在。mongodb中,这是因为非结构化的数据长度不固定且无固定数据格式。显然,在关系型数据库中存储这类数据较为困难。

于数据形态相对应的。数据的搜索分为两种,即结构化数据搜索和非结构化数据搜索。
因为结构化数据可以基于数据库来存储,而关系数据库往往支持索引。因此,结构化数据可以通过关系数据库来完成搜索和查找。通常有数据扫描关键词精准匹配,关键词部分匹配。对于比较复杂的关键词部分匹配通常借助like。来实现。
对于非结构化数据,数据的搜索主要有顺序扫描和全文搜索两种方式,显然对于非结构化数据而言,数据扫描的效率很低的方法,因此全文检索技术应运而生,而全文检索就是宝叔所说的搜索引擎要做的事。
在实现全文检索的过程中,一般都需要提取非结构化数据中的有效信息。重新组织数据的常在结构形式,而搜索数据是。要基于新结构化的数据展开,从而达到提高检索速度的目的。显而易见,全文检索是一种空间换时间的做法,前街进行数据索引的创建。需要花费一定的时间和空间,但能显著提高后期的速度,效率。

搜索引擎的工作原理。

搜索引擎的工作原理分为两个阶段,计网页数据抓取和索引阶段。搜索阶段。其中网页数据抓取和索引阶段包含网络爬虫。数据预处理,数据索引三个主要动作。搜索街道包含搜索关键词。输入内容预处理。搜索关键词查询三个主要动作。

其中网络爬虫用于抓取互联网上的网页。抓取到一个新网页后,还要继续通过该网页中的链接来。抓取其他网页,因此网络爬虫是一个不间歇的工作。一般需要自动化手段来食食。网络爬虫的主要工作就是尽可能快,尽可能全的发现和抓举。互联网上各种网业。

网页网页被网络巴掌抓起后会被存入网页库,已被现阶段进行数据的预处理。需要指出的是网页库里。存储的网页信息与我们在浏览器看到的网页。内容相同。此外,由于互联网上的网页有一定的重复性,因此,把新网页真正插入网页库之前需要进行。查重检查

网页数据预处理的程序不断的从网页库中取出网页进行必要的预处理。常见的预处理动作有除噪声内容,关键词处理,网页间链接关系计算的其中。去除噪声内容包括版权声明,文字导航条广告等。网页经过预处理后会被浓缩长以关键词为核心的内容。

此外,互联网上的内容除了常规的网页外,还有各种类型的文档。多媒体文件的这些内容均需进行相应的数据预处理动作。

数据预处理后进行数据索引。过程。索引过程先后经历正向索引和倒排索引阶段,最终建立索引库,随着新的网页等内容不断的被加入网页库。所以库的更新和维护往往也是增量进行的。
以上就是网页数据抓取和索引阶段的核心工作。下面介绍。检索阶段的核心工作

用户输入的关键词同样会经过预处理,如删除不必要的标点符号,停用词空格。字符串。拼写错误识别的。随后进行相关的风词,风词后,搜索引擎系统向索引库发出索引请求索引库会将。包含索引关键词的新功伟业从索引库中找出来,所以引擎根据索引库返回的内容进行排序处理,最终返回给用户。

http操作es

http操作es

    • ES 搜索技术历史
      • 1、搜索技术发展史
      • 2、Elasticsearch简介
      • 3、lucene简介
    • 第二章 搜索技术基础知识(一)
      • 数据搜索方式。
      • 搜索引擎的工作原理。
    • http操作es
    • 测试es服务
    • 操作索引
      • 创建索引
      • 查看所有索引
      • 查看索引:
      • 删除索引
    • 操作文档
      • 创建文档
        • 未使用自定义的id,不支持put
        • 自定义id
        • 如果是自定义id,可以使用post和put请求,version发生变化。多次提交就是update
      • 查看文档
      • 修改文档
      • 修改单个字段:局部更新
      • 删除文档
      • 删除一个不存在的文档
      • 按照条件删除
    • mappings 设置
    • 查询
      • 1)查询全部
      • 2)匹配查询
      • 3)字段匹配查询
      • 4)关键字精准查询 ,类似于 "="
      • 5)多关键字精准查询
      • 6)查询指定字段
      • 7)过滤字段
      • 8)组合查询
      • 9) 查询范围
      • 10) 模糊查询
      • 11) 单个字段排序
      • 12)多个字段排序
      • 13)高亮显示
      • 14) 分页查询
      • 15) 聚合查询
        • 最大
        • 最小
        • 平均
        • 求和
        • 个数
        • 去重后求和
        • 一下子返回 max min avg count sum
      • 16) 桶聚合查询 分组

测试es服务

在这里插入图片描述

操作索引

创建索引

http://192.168.110.14:9200/shopping
在这里插入图片描述
{
“acknowledged”: true, 响应结果
“shards_acknowledged”: true, 分片结果
“index”: “shopping” 索引名称
}
再次添加相同的索引:报错
在这里插入图片描述

查看所有索引

http://192.168.110.14:9200/_cat/indices?v
在这里插入图片描述

health:当前服务器健康状态:green(集群完整) yellow(单点正常、集群不完整) red(单点不正常)
status:索引打开、关闭状态
index:索引名
uuid:索引统一编号
pri :主分片数量
rep 副本数量
docs.count 可用文档数量
docs.deleted 文档删除状态(逻辑删除)
store.size 主分片和副分片整体占空间大小
pri.store.size 主分片占空间大小

查看索引:

http://192.168.110.14:9200/shopping
在这里插入图片描述

{
“shopping”: { 索引名称
“aliases”: {}, 别名
“mappings”: {}, 映射
“settings”: { 设置
“index”: { 索引
“creation_date”: “1625020090820”, 创建时间
“number_of_shards”: “5”, 主分片数量
“number_of_replicas”: “1”, 副分片数量
“uuid”: “Jnmea8sgRfikz77XlqkHaw”, 索引uuid 唯一性标识
“version”: { 索引版本
“created”: “5060999”
},
“provided_name”: “shopping” 索引名称
}
}
}
}

删除索引

http://192.168.110.14:9200/shopping
在这里插入图片描述
再次删除,索引不存在
在这里插入图片描述

操作文档

创建文档

在这里插入图片描述
{
“_index”: “shopping”,
“_type”: “phone”,
“_id”: “AXpa2or3t0FIJb8Na4mK”,
“_version”: 1,
“result”: “created”,
“_shards”: { 分片
“total”: 2, 总数
“successful”: 1,
“failed”: 0
},
“created”: true
}

未使用自定义的id,不支持put

在这里插入图片描述

自定义id

在这里插入图片描述

如果是自定义id,可以使用post和put请求,version发生变化。多次提交就是update

在这里插入图片描述

查看文档

http://192.168.110.14:9200/shopping/phone/1
在这里插入图片描述
{
“_index”: “shopping”,
“_type”: “phone”,
“_id”: “1”,
“_version”: 6,
“found”: true, 查询结果,true表示找到了,false表示未找到
“_source”: { 文档源信息
“title”: “小米手机222”,
“category”: “小米”,
“images”: “http://www.gulixueyuan.com/xm.jpg”,
“price”: 1999.00
}
}

修改文档

post或者put
在这里插入图片描述

修改单个字段:局部更新

http://192.168.110.14:9200/shopping/phone/1/_update
在这里插入图片描述

删除文档

http://192.168.110.14:9200/shopping/phone/1
在这里插入图片描述

删除一个不存在的文档

在这里插入图片描述

按照条件删除

post
http://192.168.110.14:9200/shopping/_delete_by_query
在这里插入图片描述
{
“took”: 118, 耗时
“timed_out”: false, 是否超时
“total”: 4, 总数
“deleted”: 4, 删除数量
“batches”: 1,
“version_conflicts”: 0,
“noops”: 0,
“retries”: {
“bulk”: 0,
“search”: 0
},
“throttled_millis”: 0,
“requests_per_second”: -1.0,
“throttled_until_millis”: 0,
“failures”: []
}

mappings 设置

使用put请求创建映射
http://192.168.110.14:9200/student/_mapping
{
“properties”:{
“name”:{ – 字段名称
“type”:“text”, – 字段类型
“index”:true
},
“sex”:{
“type”:“text”,
“index”:false
},
“age”:{
“type”:“long”,
“index”:false
}
}
}
1)字段类型 有哪些?
String 字符串类型
text: 可分词
keyword: 关键字 不可分词
Numerical 数值类型
基本类型:byte short int long double float
浮点数的高进度类型:scaled_float
Date 日期类型
Array 数组类型
Object 对象类型

2)定义中的index?
index 表示是否索引。默认是true,该字段会被索引到,能够进行搜索;false 表示不能被搜索到

3)store 是否将数据进行独立存储,默认是false
原始的文本会存储到_source,默认情况下 ,其他提取出来的字段都不是独立存储的,是从_source里面
提取出来的.当然你也可以独立的存储某个字段,只要设置"store":true即可,获取独立存储的字段
要比从_source中解析出来快得多,但是也会占用更多的空间,所以要更具业务需要来设置

4)analyzer: 分词器,这里的ik_max_word 及使用ik分词器

查询

get http://192.168.110.14:9200/shopping/_search

1)查询全部

{
	"query":{
		"mach_all":{
			
		}
	}
}

2)匹配查询

{
	"query":{
		"mach":{
			"name":"张三"
		}
	}
}

3)字段匹配查询

在多个字段上进行查询

{
	"query":{
		"multi_mach":{
			"name":"张三",
			"fields":["name","nickname"]
		}
	}
}

4)关键字精准查询 ,类似于 “=”

{
	"query":{
		"trrm":{
			"name":"张三"
		}
	}
}

5)多关键字精准查询

{
	"query":{
		"trrms":{
			"name":["张三","lisi"]
		}
	}
}

6)查询指定字段

{
	"_source":["name","age"]
	"query":{
		"trrm":{
			"name":"张三"
		}
	}
}

7)过滤字段

includes 包含
excludes 不包含
{
	"_source":{
		"includes":["name","age"],
		"excludes":["sex"]
	}
	"query":{
		"trrm":{
			"name":"张三"
		}
	}
}

8)组合查询

bool  must must_not should
{
	"query":{
		"bool":{
			"must":{
				"sex":"男"
			},
			"must_not":{
				"age":"40"
			},
			"should":{
				"name":"张"
			}
		}
	}
}

9) 查询范围

gt 大于>
gte 大于等于>=
lt 小于<
lte 小于等于<=
{
	"query":{
		"range":{
			"age":{
				"gt":10,
				"lt":50
			}
		}
	}
}

10) 模糊查询

fuzzy 类似于 like
fuzziness 指定距离

{
	"query":{
		"fuzzy":{
			"name":"si",
			"fuzziness":2
		},
		
	}
}

11) 单个字段排序

{
	"query":{
		"mach":{
			"name":"张三"
		}
	},
	"sort":[
		"age":{
			"order":desc
		}
	]
}

12)多个字段排序

{
	"query":{
		"mach_all":{}
	},
	"sort":[
		"age":{
			"order":desc
		},
		"_source":{
			"order":desc
		}
	]
}

13)高亮显示

{
	"query":{
		"mach_all":{}
	},
	"highlight":{
		"pre_tags": "<font color='red'>",
		"post_tags":"</font>"
		"fields":{
			"name":{
				
			}
		}
	}
}

14) 分页查询

{
	"query":{
		"mach_all":{}
	},
	"sort":[
		"age":{
			"order":desc
		}
	],
	"from":0
	"size":5
}

15) 聚合查询

最大

{
	"aggs":{
		"max_age":{
			"max":{
				"fields":"age"
			}
		}
	},
	"size":0
}

最小

{
	"aggs":{
		"min_age":{
			"min":{
				"fields":"age"
			}
		}
	},
	"size":0
}

平均

{
	"aggs":{
		"avg_age":{
			"avg":{
				"fields":"age"
			}
		}
	},
	"size":0
}

求和

{
	"aggs":{
		"sum_age":{
			"sum":{
				"fields":"age"
			}
		}
	},
	"size":0
}

个数

{
	"aggs":{
		"sum_age":{
			"sum":{
				"fields":"age"
			}
		}
	},
	"size":0
}

去重后求和

{
	"aggs":{
		"distinct_age":{
			"cardinality":{
				"fields":"age"
			}
		}
	},
	"size":0
}

一下子返回 max min avg count sum

{
	"aggs":{
		"seats_age":{
			"seats":{
				"fields":"age"
			}
		}
	},
	"size":0
}

16) 桶聚合查询 分组

{
	"aggs":{
		"age_groupby":{
			"terms":{
				"fields":"age"
			}
		}
	},
	"size":0
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车上的电源模式详解

① 一般根据钥匙孔开关的位置来确定整车用电类别&#xff0c;汽车上电源可以分为常电&#xff0c;IG电&#xff0c;ACC电 1&#xff09;常电。常电表示蓄电池和发电机输出直接供电&#xff0c;即使点火开关在OFF档时&#xff0c;也有电量供应。一般来讲模块的记忆电源及需要在车…

Maven工程的安装配置及搭建(集成eclipse完成案例,保姆级教学)

目录 一.下载及安装及环境配置 1.下载及安装 2.环境变量的配置 3.检测是否安装成功 4.配置Maven 1.更换本地仓库 2. 配置镜像 二.集成eclipse完成案例 1.eclipse前期配置Maven 2.创建Maven工程 一.下载及安装及环境配置 1.下载及安装 下载地址&#xff1a;Maven – Down…

【算法|数组】手撕经典二分法

算法|数组——二分查找 文章目录 算法|数组——二分查找引言二分查找左闭右闭写法左闭右开写法 总结 引言 首先学习这个算法之前需要了解数组知识&#xff1a;数组。 大概介绍以下&#xff1a; 数组是存储在连续内存空间上的相同类型数据的集合。数组下标都是从0开始。数组在…

网络编程(JavaEE初阶系列10)

目录 前言&#xff1a; 1.网络编程的基础 1.1为什么需要网络编程 1.2什么是网络编程 1.3网络编程中的基本概念 1.3.1发送端和接收端 1.3.2请求和响应 1.3.3客户端和服务端 2.Socket套接字 2.1概念 2.2分类 3.UDP数据报套接字编程 3.1DataGramSocket API 3.2Datagr…

VR全景乡村旅游浇灭乡愁,近距离体验自然之美

说起乡愁&#xff0c;可能每位漂泊的游子都有所感受&#xff0c;在外漂泊数十载&#xff0c;每到佳节倍思亲&#xff0c;家乡的一草一木都浮现在脑海中&#xff0c;满载着儿时的回忆。为了留住那抹儿时回忆&#xff0c;VR全景助力数字化乡村建设。 乡村振兴是国家的重大战略&am…

内网横向移动—ARP攻击图片捕捉数据劫持DNS劫持

内网横向移动—ARP攻击&图片捕捉&数据劫持&DNS劫持 1. ARP1.1. APR介绍1.1.1. ARP工作原理1.1.2. APR欺骗工作原理 1.2. 环境准备1.3. 适用场景 2. ARP断网攻击演示2.1. 使用kali进行演示2.1.1. nmap判断存活2.1.2. 安装工具2.1.3. 攻击Windows 10虚拟机2.1.3.1. 查…

Ubuntu常用压缩指令总结

一、tar tar是Linux系统中最常用的压缩工具之一&#xff0c;它的一个优点是它可以保留文件的权限和所有权信息。tar可以创建.tar文件&#xff08;通常称为"tarball"&#xff09;&#xff0c;或者与gzip或bzip2等工具结合使用来创建.tar.gz或.tar.bz2文件。gzip工具的…

CSS:盒子模型 与 多种横向布局方法

目录 盒子模型块级盒子内联级盒子内联块级盒子弹性盒子display 改变模型区域划分text 内容区padding 填充区border 边框区margin 外边距直接设置盒子大小 布局横向布局方法一 float 浮起来方法二 内联块级元素实现方法三 弹性盒子模型 盒子模型 块级盒子 独占一行&#xff0c…

轻松转换TS视频为MP4,实现优质视频剪辑体验

如果你是一个视频剪辑爱好者&#xff0c;你一定会遇到各种视频格式之间的转换问题&#xff0c;特别是将TS视频转换为MP4格式。别担心&#xff0c;我们的视频剪辑软件将为你提供最简单、高效的解决方案&#xff01; 首先第一步&#xff0c;我们要进入媒体梦工厂主页面&#xff…

如何使用webpack打包一个库library,使用webpack打包sdk.

如何使用webpack打包一个库library 如果你需要自己封装一些包给别人使用,那么可以参考以下方法 初始化库 mkdir library cd library npm init -y经过以上步骤后会生成一个library文件夹&#xff0c;里面包含一个package.json文件。然后简单修改为如下所示&#xff1a; {&qu…

idea中提示Unsupported characters for the charset ‘ISO-8859-1‘

application.properties中文注释拉黄线 &#xff0c;提示Unsupported characters for the charset ISO-8859-1 解决办法&#xff1a; 注意&#xff1a; 改完之后之前输入的中文就变成“ &#xff1f;&#xff1f;&#xff1f;”了&#xff0c;建议备份一下 1、打开setti…

Unity C# 之 Http 获取网页的 html 数据,并去掉 html 格式等相关信息

Unity C# 之 Http 获取网页的 html 数据&#xff0c;并去掉 html 格式等相关信息 目录 Unity C# 之 Http 获取网页的 html 数据&#xff0c;并去掉 html 格式等相关信息 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、关键代码 一、简单介绍 Unity中的一些知…

解决GitHub的速度很慢的几种方式

1. GitHub 镜像访问 这里提供两个最常用的镜像地址&#xff1a; https://hub.njuu.cf/search https://www.gitclone.com/gogs/search/clonesearch 也就是说上面的镜像就是一个克隆版的 GitHub&#xff0c;你可以访问上面的镜像网站&#xff0c;网站的内容跟 GitHub 是完整同步…

【变形金刚03】使用 Pytorch 开始构建transformer

一、说明 在本教程中&#xff0c;我们将使用 PyTorch 从头开始构建一个基本的转换器模型。Vaswani等人在论文“注意力是你所需要的一切”中引入的Transformer模型是一种深度学习架构&#xff0c;专为序列到序列任务而设计&#xff0c;例如机器翻译和文本摘要。它基于自我注意机…

【Quarkus技术系列】打造基于Quarkus的云原生微服务框架实践(1)

前提介绍 本系列文章主要讲解如何基于Quarkus技术搭建和开发"专为Kubernetes而优化的Java微服务框架"的入门和实践&#xff0c;你将会学习到如何搭建Quarkus微服务脚环境及脚手架&#xff0c;开发Quarkus的端点服务&#xff0c;系统和应用层级的配置介绍与Quarkus的…

一文读懂c++语言

一文读懂C语言 C的发展C的设计目标C的特性C的挑战 C的发展 C是一种通用的、高级的编程语言&#xff0c;它是C语言的扩展。C由Bjarne Stroustrup于1983年首次引入&#xff0c;并在之后的几十年中不断发展壮大。C被广泛应用于各种领域&#xff0c;包括系统开发、游戏开发、嵌入式…

概率图模型(Probabilistic Graphical Model,PGM)

概率图模型&#xff08;Probabilistic Graphical Model&#xff0c;PGM&#xff09;&#xff0c;是一种用图结构来描述多元随机变量之间条件独立性的概率模型。它可以用来表示复杂的概率分布&#xff0c;进行有效的推理和学习&#xff0c;以及解决各种实际问题&#xff0c;如图…

传输控制协议TCP

目录 TCP报文格式 TCP的特点 TCP原理: 1.确认应答机制 2.超时重传机制 3.连接管理机制 建立连接 ​编辑关闭连接 4.滑动窗口机制 ​5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答 TCP报文格式 1.源端口号:发送端的哪一个端口发出的 2.目的端口号:接收端的哪一个端…

Jupyter Notebook 500 : Internal Server Error

1. 这个问题的根本原因在于&#xff1a; pygments 包 版本过高。 安装pygments 2.6.1 2.jupyter版本如下 如果某个版本有冲突&#xff0c;卸载了重新安装一下就行。 安装命令&#xff1a; pip install pygments 2.6.1 -i https://pypi.tuna.tsinghua.edu.cn/simple 另外…

NanoPi NEO移植LVGL8.3.5到1.69寸ST7789V屏幕

移植前准备 移植好fbtft屏幕驱动 参考链接&#xff1a;友善之臂NanoPi NEO利用fbtft驱动点亮1.69寸ST7789V2屏幕 获取源码 名称地址描述lvglhttps://github.com/lvgl/lvgl.gitlvgl-8.3.5lv_drivershttps://github.com/lvgl/lv_drivers.gitlv_drivers-6.1.1 创建工程目录 创…