asa8.4 做网站映射/2019网站seo
目录
ElasticSearch
正向索引与倒排索引
数据库与elasticsearch概念对比
安装ES、Kibana与分词器
分词器作用
自定义字典
拓展词库
禁用词库
索引库操作
Mapping属性
创建索引库
查询索引库
删除索引库
修改索引库
文档操作
新增文档
查找文档
修改文档
全量修改
增量修改
删除文档
RestClient操作索引库
RestClient操作文档
新增文档
根据Id查询文档数据
更新文档
删除文档
批量新增
DSL查询语法
查询所有
全文检索
精确查询
地理查询
复合查询
搜索结果处理
排序
分页
高亮
RestClient查询文档
查询全部
查询文档
解析数据
全文检索查询
精确查询
复合查询
排序和分页
高亮
ElasticSearch
q:什么是elasticsearch?
a:一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能
q:什么是elastic stack (ELK) ?
a:是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch
q:什么是Lucene?
a:是Apache的开源搜索引擎类库,提供了搜索引擎的核心API
正向索引与倒排索引
在理解正向索引与倒排索引之前,先理解文档与词条的概念
- 文档(document):每条数据就是一个文档
elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息文档数据会被序列化为json格式后存储在elasticsearch中。
- 词条(term):文档按照语义分成的词语
- 索引:相同类型的文档的集合
- 映射:索引中文档的字段约束信息,类似于表的约束结构
传统数据库比如MySQL使用的是正向索引。通常使用id作为索引
在搜索手机时,如果使用select * from 表 where title like '%手机%';语句进行查找,它会逐条扫描数据,然后找到title中的数据后,判断是否保存”手机“词条。这样的效率很慢.
而elasticsearch采用倒排索引
数据库与elasticsearch概念对比
安装ES、Kibana与分词器
这里是基于Docker的安装,ES也支持windows的安装,具体安装方法请参考其他教程。
首先我们需要将ES与Kibana(为ES提供一个可视化界面)容器互联,因此需要先创建一个网络
输入docker命令
docker network create es-net(es-net网络名称,自己随便起名)
docker pull elasticsearch:版本号
docker pull kibana:版本号(两个版本号需要一致)docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:版本号
之后访问9200端口
出现如下格式证明启动成功。
接下来启动kibana
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601 \
kibana:版本号
启动成功后访问5601端口,出现如下界面
ES默认的分词器对中文分词并不友好。因此我们需要下载IK分词器
下载地址:GitHub - medcl/elasticsearch-analysis-ik: The IK Analysis plugin integrates Lucene IK analyzer into elasticsearch, support customized dictionary.
下在对应版本并解压到刚刚指定的数据卷。
重启容器
docker restart es
IK分词器有两种拆分模式
- ik_smart:最少切分(空间占用更少)
- ik_max_word:最细切分(切分力度最大,文档搜索到的概率更大)
下面是两种示例
POST /_analyze
{"text":"观察ik分词器的两种模式","analyzer": "ik_max_word"
}
{
"tokens" : [
{
"token" : "观察",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "ik",
"start_offset" : 2,
"end_offset" : 4,
"type" : "ENGLISH",
"position" : 1
},
{
"token" : "分词器",
"start_offset" : 4,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "分词",
"start_offset" : 4,
"end_offset" : 6,
"type" : "CN_WORD",
"position" : 3
},
{
"token" : "器",
"start_offset" : 6,
"end_offset" : 7,
"type" : "CN_CHAR",
"position" : 4
},
{
"token" : "的",
"start_offset" : 7,
"end_offset" : 8,
"type" : "CN_CHAR",
"position" : 5
},
{
"token" : "两种",
"start_offset" : 8,
"end_offset" : 10,
"type" : "CN_WORD",
"position" : 6
},
{
"token" : "两",
"start_offset" : 8,
"end_offset" : 9,
"type" : "COUNT",
"position" : 7
},
{
"token" : "种",
"start_offset" : 9,
"end_offset" : 10,
"type" : "CN_CHAR",
"position" : 8
},
{
"token" : "模式",
"start_offset" : 10,
"end_offset" : 12,
"type" : "CN_WORD",
"position" : 9
}
]
}
POST /_analyze
{"text":"观察ik分词器的两种模式","analyzer": "ik_smart"
}
{
"tokens" : [
{
"token" : "观察",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "ik",
"start_offset" : 2,
"end_offset" : 4,
"type" : "ENGLISH",
"position" : 1
},
{
"token" : "分词器",
"start_offset" : 4,
"end_offset" : 7,
"type" : "CN_WORD",
"position" : 2
},
{
"token" : "的",
"start_offset" : 7,
"end_offset" : 8,
"type" : "CN_CHAR",
"position" : 3
},
{
"token" : "两种",
"start_offset" : 8,
"end_offset" : 10,
"type" : "CN_WORD",
"position" : 4
},
{
"token" : "模式",
"start_offset" : 10,
"end_offset" : 12,
"type" : "CN_WORD",
"position" : 5
}
]
}
分词器作用
- 创建倒排索引时对文档分词
- 用户搜索时,对输入的内容分词
自定义字典
ik分词器之所以可以实现分词,是内部存在一个字典,根据字典会进行划分。但是有的是时候需要排除某些词语,比如说”嗯“,”哦“等词语,没有划分的意义。又比如说网络梗”打个胶先“等这些不会被识别为一个词语。这个时候我们可以自定义我们的词典。具体修改方式如下。
拓展词库
修改ik分词器插件中的confg目录下的IKAnalyzer.cfg.xml文件
<?xml version="1." encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展字典 *** 添加扩展词典--><entry key="ext_dict">ext.dic</entry>
</properties>
禁用词库
<?xml version="1." encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties><comment>IK Analyzer 扩展配置</comment><!--用户可以在这里配置自己的扩展停止词字典 *** 添加停用词词典--><entry key="ext_stopwords">stopword.dic</entry>
</properties>
配置的文件都需要和IKAnalyzer.cfg.xml在同一目录下。如果不存在就自己创建
索引库操作
Mapping属性
mapping是对索引库中文档的约束,常见的mapping属性包括:
- type:字段数据类型,常见的简单类型有:
- 字符串: text (可分词的文本)、keyword (精确值,例如:品牌、国家、ip地址)
- 数值:long、integer、short、byte、double、float
- 布尔:boolean
- 日期:date
- 对象:object
- index:是否创建索引,默认为true
- analyzer:使用哪种分词器
- properties:该字段的子字段
ES还支持两种地理坐标数据类型:
- geo_point:由维度和经度确定的一个点
- geo_shape:由多个geo_ponit组成的复杂图形
创建索引库
创建索引库的语法示例如下
PUT /zmbwcx
{"mappings": {"properties": {"info":{"type": "text","analyzer": "ik_smart"},"people":{"properties": {"name":{"type":"keyword"},"sex":{"type":"keyword"}}}} }
}
查询索引库
GET /索引库名
删除索引库
DELETE /索引库名
修改索引库
索引库和mapping一旦创建无法进行修改(修改会导致原有的倒排索引发生改变,影响较大,因此无法修改),但是可以向其中添加新的字段
文档操作
新增文档
文档id如果不指定,会随机生成一个文档id
POST /zmbwcx/_doc/1
{"info":"成功人士","people":{"name":"zmbwcx","sex":"男"}
}
查找文档
GET /索引库名/_doc/文档id
字段解读:
- _index:索引库名
- _type:查询类型
- _id:文档id
- _version:查询次数
- _source:文档内容
修改文档
全量修改
删除旧文档,添加新文档。具体操作和新增文档相同,只有请求由POST变为PUT。如果修改的文档id不存在,则相当于新增
PUT /索引库名/_doc/文档id
{"字段1":"值1","字段2":"值2",// ...略
}
增量修改
POST /索引库名/_update/文档id
{"doc":{"字段名":"新的值"}
}
删除文档
DELETE /索引库名/_doc/文档id
RestClient操作索引库
资料下载:https://pan.baidu.com/s/1ORJ-jERwZzJMoyWpCrgafw?pwd=zmbw
mapping要考虑的问题:字段名、数据类型、是否参与搜索、是否分词、如果分词,分词器是什么?
字段名与数据类型的设计与数据库一样就可以。其余的部分要联合业务决定
具体DSL语句如下,我们可以选择在视图界面直接运行如下代码也可以在Java中创建索引库。
PUT /hotel
{"mappings":{"properties":{"id":{"type":"keyword"},"name":{"type":"text","analyzer":"ik_max_word","copy_to": "all"},"address":{"type":"keyword","index": false},"price":{"type":"integer"},"score":{"type":"integer"},"brand":{"type":"keyword","copy_to": "all"},"city":{"type":"keyword"},"starName":{"type":"keyword"},"business":{"type":"keyword","copy_to": "all"},"location":{"type": "geo_point"},"pic":{"type":"keyword","index": false},"all":{"type": "text","analyzer": "ik_max_word"}}}
}
如果需要实现搜索一个字段可以查询到多个字段的内容需要使用字段拷贝。
"拷贝字段":{"type":"test","analyzer":"ik_max_word"
},
"被拷贝字段":{"copy_to":"拷贝字段"
}
创建好mapping映射后,编写Java部分的代码
首先引入依赖,这里的版本一定要和docker中安装的版本一样
<properties><java.version>1.8</java.version><elasticsearch.version>7.12.1</elasticsearch.version>
</properties>
<dependencies><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId></dependency>
</dependencies>
创建客户端对象,并使用该对象创建索引库。
@SpringBootTest
class HotelDemoApplicationTests {private RestHighLevelClient client;@BeforeEach//初始化客户端void setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.116.131:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}@Test//创建索引库public void testCreateIndex() throws Exception {CreateIndexRequest request = new CreateIndexRequest("hotel");request.source(MAPPING_TEMPLATE, XContentType.JSON);client.indices().create(request, RequestOptions.DEFAULT);}@Test//删除索引库public void testDeleteIndex() throws Exception {DeleteIndexRequest request = new DeleteIndexRequest("hotel");client.indices().delete(request,RequestOptions.DEFAULT);}@Test//判断索引库是否存在public void testGetIndex() throws Exception {GetIndexRequest request = new GetIndexRequest("hotel");boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);System.out.println(exists?"索引库存在":"索引库不存在");}
}
RestClient操作文档
新增文档
@SpringBootTest
class TestDoc {private RestHighLevelClient client;@Autowiredprivate IHotelService service;@BeforeEachvoid setUp() {this.client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://192.168.116.131:9200")));}@AfterEachvoid tearDown() throws IOException {this.client.close();}@Testpublic void testInsertDoc() throws Exception {//从数据库中查找数据Hotel hotel = service.getById(36934);//转换为Mapping相对应的格式HotelDoc hotelDoc = new HotelDoc(hotel);//创建添加请求IndexRequest request = new IndexRequest("hotel").id(hotelDoc.getId().toString());//准备JSON文档request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);//添加文档client.index(request,RequestOptions.DEFAULT);}
}
去可视化界面查询是否插入成功
根据Id查询文档数据
@Testpublic void testGetResultById() throws Exception {GetRequest request = new GetRequest("hotel","36934");GetResponse response = client.get(request, RequestOptions.DEFAULT);String jsonStr = response.getSourceAsString();HotelDoc hotelDoc = JSON.parseObject(jsonStr, HotelDoc.class);System.out.println(hotelDoc);}
更新文档
更新文档有两种,一种是全量更新,更改方式与新增文档一模一样。
另一种是局部更新,代码如下
@Testpublic void testUpdateDoc() throws Exception {UpdateRequest request = new UpdateRequest("hotel","36934");//参数类似于k:v,但不同的是,不是使用:而是,分割,每两个作为一个kv。第三个参数作为krequest.doc("price","300");client.update(request,RequestOptions.DEFAULT);}
删除文档
@Testpublic void testDeleteDoc() throws Exception {DeleteRequest request = new DeleteRequest("hotel","36934");client.delete(request,RequestOptions.DEFAULT);}
批量新增
@Testpublic void testInsertDocs() throws Exception {List<Hotel> list = service.list();List<HotelDoc> listHotelDocs = list.stream().map(hotel -> new HotelDoc(hotel)).collect(Collectors.toList());BulkRequest bulkRequest = new BulkRequest();for (HotelDoc hotelDoc : listHotelDocs) {bulkRequest.add(new IndexRequest("hotel").id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc),XContentType.JSON));}client.bulk(bulkRequest,RequestOptions.DEFAULT);}
DSL查询语法
查询所有
但实际上有条数限制,为10条
GET /hotel/_search
{"query": {"match_all": {}}
}
全文检索
会对用户输入的数据经过分词器处理后搜索文档,常用于搜索框
一种是match搜索
GET /hotel/_search
{"query": {"match": {"all": "北京"}}
}
一种是multi_match,可以查询多个字段
GET /hotel/_search
{"query": {"multi_match": {"query": "北京如家","fields": ["brand","name","business"]}}
}
两种查询效果基本相同,但第二种查询的索引更多,速度更慢些,所以更推荐通过拷贝的方式只查询一个索引。
精确查询
精确查询一般是查找keyword、数值、日期、boolean等类型字段。所以不会对搜索条件分词。
- term:根据词条精确值查询
- range:根据值的范围查询
查询北京地区的旅店信息
GET /hotel/_search
{"query": {"term": {"city": {"value": "北京"}}}
}
查询价格区间的旅店信息
GET /hotel/_search
{"query": {"range": {"price": {"gte": 100,"lte": 200}}}
}
地理查询
geo_bounding_box查询方式。
geo_distance查询方式
复合查询
复合查询可以将其他简单的查询组合起来,实现更复杂的搜索逻辑
fuction score:算分函数查询,可以控制文档相关性算分,控制文档排名
boolean query:布尔查询是一个或多个查询子句的组合。子查询的组合方式有
- must:必须匹配每个子查询,类似”与“
- should:选择性匹配子查询,类似”或“
- must_not:必须不匹配,不参与算分,类似”非“
- filter:必须匹配,不参与算分
参与算分的条件越多,性能越差
搜索结果处理
排序
默认根据相关度算分(_score)排序,但是可以自定义排序规则,比如说价格,或是日期,如果指定其他排序,则放弃算分,性能更好
按用户评分降序,价格升序查询
GET /hotel/_search
{"query": {"match_all": {}},"sort": [{"score": "desc"},{"price": "asc"}]
}
分页
ES中默认一次查询出10条数据。如果需要获取更多的数据,需要修改分页参数
#分页查询
GET /hotel/_search
{"query": {"match_all": {}},"from": 10, //从第十条开始查找"size": 20 //查询20条数据
}
分页存在的问题:
ES和数据库不同,ES做的是逻辑分页,也就是查询出前30条数据,然后截取10之后的20条数据。其次,ES通常为了存储更多文档都是集群工作,会将文档拆分到不同节点上。如果我们以价格升序排序后,截取50-60的文档,那么实际上是每个节点都进行排序后,每个节点数据集合到内存后再次重新排序后再去截取50-60的数据。
如果搜索的页数过深,或者结果集(from+size)过大,对内存和CPU消耗越高,因此ES设定结果集上限为1000
高亮
GET /hotel/_search
{"query": {"match": {"all": "北京"}},"highlight": {"fields": {"name": {"require_field_match": "false" //取消字段匹配}}}
}
ES默认情况下ES的搜索字段必须与高亮字段名一致。如果不需要一致,则需要添加配置
RestClient查询文档
查询全部
查询文档
@Testpublic void testSearchMatchAll() throws Exception {SearchRequest request = new SearchRequest("hotel");//准备DSLrequest.source().query(QueryBuilders.matchAllQuery());SearchResponse response = client.search(request, RequestOptions.DEFAULT);System.out.println(response);}
解析数据
结合JSON格式进行解析数据
@Testpublic void testSearchMatchAll() throws Exception {SearchRequest request = new SearchRequest("hotel");//准备DSLrequest.source().query(QueryBuilders.matchAllQuery());SearchResponse response = client.search(request, RequestOptions.DEFAULT);System.out.println(response);SearchHits searchHits = response.getHits();long totalNum = searchHits.getTotalHits().value;SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {HotelDoc hotelDoc = JSON.parseObject(hit.getSourceAsString(), HotelDoc.class);System.out.println(hotelDoc);}System.out.println("一共查询到:"+totalNum+"条");}
全文检索查询
@Testpublic void testSearchMatch() throws Exception {SearchRequest request = new SearchRequest("hotel");request.source().query(QueryBuilders.matchQuery("all","北京"));SearchResponse response = client.search(request, RequestOptions.DEFAULT);SearchHits searchHits = response.getHits();long totalNum = searchHits.getTotalHits().value;SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {HotelDoc hotelDoc = JSON.parseObject(hit.getSourceAsString(), HotelDoc.class);System.out.println(hotelDoc);}System.out.println("一共查询到:"+totalNum+"条");}
与MatchAll的查询方式基本无异。多了个指定字段与查询内容
精确查询
复合查询
排序和分页
@Testpublic void testSearchPage() throws Exception {SearchRequest request = new SearchRequest("hotel");request.source().query(QueryBuilders.matchQuery("all","北京"));request.source().from(10).size(5);request.source().sort("price", SortOrder.ASC);SearchResponse response = client.search(request, RequestOptions.DEFAULT);SearchHits searchHits = response.getHits();long totalNum = searchHits.getTotalHits().value;SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {HotelDoc hotelDoc = JSON.parseObject(hit.getSourceAsString(), HotelDoc.class);System.out.println(hotelDoc);}System.out.println("一共查询到:"+totalNum+"条");}
高亮
@Testpublic void testHighLight() throws Exception {SearchRequest request = new SearchRequest("hotel");request.source().query(QueryBuilders.matchQuery("all","北京"));request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));SearchResponse response = client.search(request, RequestOptions.DEFAULT);SearchHits searchHits = response.getHits();SearchHit[] hits = searchHits.getHits();for (SearchHit hit : hits) {HotelDoc hotelDoc = JSON.parseObject(hit.getSourceAsString(), HotelDoc.class);Map<String, HighlightField> highlightFields = hit.getHighlightFields();if (!CollectionUtils.isEmpty(highlightFields)){HighlightField field = highlightFields.get("name");if (field!=null){String value = field.getFragments()[0].string();hotelDoc.setName(value);}}System.out.println(hotelDoc);}}
相关文章:

Spring Cloud之ElasticSearch的学习【详细】
目录 ElasticSearch 正向索引与倒排索引 数据库与elasticsearch概念对比 安装ES、Kibana与分词器 分词器作用 自定义字典 拓展词库 禁用词库 索引库操作 Mapping属性 创建索引库 查询索引库 删除索引库 修改索引库 文档操作 新增文档 查找文档 修改文档 全量…...

vscode免密码认证ssh连接virtual box虚拟机
文章目录 安装软件virtual box配置vscode配置创建并传递密钥连接虚拟机最后 安装软件 安装vscode和virtual box,直接官网下载对应软件包,下载之后,点击执行,最后傻瓜式下一步安装即可 virtual box配置 创建一个仅主机网络的网卡 …...

【Linux】Centos yum源替换
YUM是基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。 CentOS 8操作系统版本结束了生命周期(EOL)࿰…...

uniapp组件初始化的销毁(监听隐藏事件)
onHide是监听隐藏事件onHide() {console.log("销毁");this.clearTimer(); }, onShow(){console.log("初始化");this.getOrderInfo() },...

leetcode:1207. 独一无二的出现次数(python3解法)
难度:简单 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。 示例 1: 输入:arr [1,2,2,1,1,3] 输出:true 解释&…...

2023秋《论文写作》课程总结
2023秋《论文写作》课程总结 授课教师为闵帆教授,原文链接《论文写作》 文章目录 2023秋《论文写作》课程总结一、关于写作工具二、关于写作中的单词、短语、语法等三、关于论文题目四、关于摘要和关键词五、关于引言部分六、关于方法及实验部分七、关于结论八、关…...

Linux学习第27天:Platform设备驱动开发: 专注与分散
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 专注与分散是我在题目中着重说明的一个内容。这是今天我们要学习分离与分层概念的延伸。专注是说我们要专注某层驱动的开发,而对于其他层则是芯片厂商…...

最长公共子序列
题目描述 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符…...

万字解析设计模式之工厂方法模式与简单工厂模式
一、概述 1.1简介 在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重,假如我们要更换对象,所有new对象的地方都需要修改一遍,这显然违背了软件设计的…...

One-to-N N-to-One: Two Advanced Backdoor Attacks Against Deep Learning Models
One-to-N & N-to-One: Two Advanced Backdoor Attacks Against Deep Learning Models----《一对N和N对一:针对深度学习模型的两种高级后门攻击》 1对N: 通过控制同一后门的不同强度触发多个后门 N对1: 只有当所有N个后门都满足时才会触发…...

洛谷 B2009 计算 (a+b)/c 的值 C++代码
目录 题目描述 AC Code 切记 题目描述 题目网址:计算 (ab)/c 的值 - 洛谷 AC Code #include<bits/stdc.h> using namespace std; int main() {int a,b,c;cin>>a>>b>>c;cout<<(ab)/c<<endl;return 0; } 切记 不要复制题…...

Arduino驱动ME007-ULA防水测距模组(超声波传感器)
目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 3.1、读取串口数据...

Linux 权限管理(二)
文件类型和访问权限(事物属性) linux前都会有一串这个字符,第二字符到第九字符分别表示拥有者,所属组,和other所对应的权限。那么第一个字符表示什么呢? 第一个字符表示文件类型: d:…...
线性代数 第一章 行列式
一、概念 不同行不同列元素乘积的代数和(共n!项) 二、性质 经转置行列式的值不变,即; 某行有公因数k,可把k提到行列式外。特别地,某行元素全为0,则行列式的值为0; 两行互换行列式…...

查询Oracle所有用户相关信息
$sqlplus / as sysdba 1. 查询oracle中所有用户信息 select * from dba_users; select * from all_users; select distinct owner from all_objects; 2. 只查询用户和密码 select username,password from dba_users; 3. 查询当前用户信息 select * from dba_ustats; 4…...

电路的电线的拼接
不积跬步无以至千里,今天小编也是复习今天学习的内容,废话不多说,看博客吧!!! 目录 准备条件 操作 成品 准备条件 操作 将定制的套管插入导线当中,24V或者0V是尖端的端子,后面根…...

前端学习之webpack
概述 webpack是一个流行的前端项目构建工具(打包工具),可以解决当前web开发中所面临的问题。 webpack提供了友好的模块化支持,以及代码压缩混淆、处理js兼容问题、性能优化等强大的功能,从而让程序员把工作重心放到具…...

2023NOIP A层联测20-旅行
小 A 旅行到了远方的一座城市,其内部的道路可以被视为一张包含恰好 n n n 个点以及 n n n 条边的无向连通图。这里的居民可以用一种特质的墨水来改变图中某一条边的颜色。 居民们的狂欢节即将开始了,且节日会持续 m m m 天。每一天,居民们…...

STM32 中断NVIC详解,配置及示例
NVIC全称 Nested Vectored Controller 嵌套向量中断控制器 它是一种硬件设备,用于管理和协调处理器的中断请求。NVIC可以管理多个中断请求,并按优先级处理它们。当一个中断请求到达时,NVIC会确定其优先级并决定是否应该中断当前执行的程序&am…...

10.30英语期中稿
influence of Chinese and Japanese literary culture on the country and the world, and compare the differences between the two 对自己文化影响 中日文学文化比较 表达,餐饮,服装 相似点与不同点 与日本友人交流 draft Chinese and Japanes…...

二维数组如何更快地遍历
二维数组如何更快地遍历 有时候,我们会发现,自己的代码和别人的代码几乎一模一样,但运行时间差了很多,别人是 AC \text{AC} AC,你是 TLE \text{TLE} TLE,这是为什么呢? 一个可能的原因是数组的…...

【网络安全】Seeker内网穿透追踪定位
Seeker追踪定位对方精确位置 前言一、kali安装二、seeker定位1、ngrok平台注册2、获取一次性邮箱地址3、ngrok平台登录4、ngrok下载5、ngrok令牌授权6、seeker下载7、运行seeker定位8、运行隧道开启监听9、伪装链接10、用户点击(获取定位成功)11、利用经…...

Spring Boot 3系列之一(初始化项目)
近期,JDK 21正式发布,而Spring Boot 3也推出已有一段时间。作为这两大技术领域的新一代标杆,它们带来了许多令人振奋的新功能和改进。尽管已有不少博客和文章对此进行了介绍,但对于我们这些身处一线的开发人员来说,有些…...

用python判断一个数是否为素数
判断一个数是否为素数可以使用以下方法: 排除特殊情况:首先判断该数是否小于等于1,因为素数定义中,素数必须大于1。如果小于等于1,则该数不是素数。 除尽法(试除法):从2开始&#x…...

FreeRTOS_信号量之二值信号量
目录 1. 信号量简介 2. 二值信号量 2.1 二值信号量简介 2.1.1 二值信号量无效 2.1.2 中断释放信号量 2.1.3 任务获取信号量成功 2.1.4 任务再次进入阻塞态 2.2 创建二值信号量 2.2.1 vSemaphoreCreateBinary() 2.2.2 xSemaphoreCreateBinary() 2.2.3 xSemaphoreCrea…...

使用Gateway解决跨域问题时配置文件不生效的情况之一
首先html文件只有一个发送ajax请求 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content&q…...

【火影手游】新版押镖护送高分攻略
文章目录 Part.I IntroductionPart.II 迪达拉视角1、打栅栏2、石头边,打石头和栅栏3、石头边,踩封印,撞力士4、大树前,打石头和栅栏5、石头边,给佩恩当路标6、后一前二接大招7、补伤害 Part.III 佩恩视角1、头进洞&…...

【JVM】类的声明周期(加载、连接、初始化)
🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 JVM 一、类的声明周期(加载阶段…...

开源3D激光(视觉)SLAM算法汇总(持续更新)
原文连接 目录 一、Cartographer 二、hdl_graph_slam 三、LOAM 四、LeGO-LOAM 五、LIO-SAM 六、S-LOAM 七、M-LOAM 八、livox-loam 九、Livox-Mapping 十、LIO-Livox 十一、FAST-LIO2 十二、LVI-SAM 十三、FAST-Livo 十四、R3LIVE 十五、ImMesh 十六、Point-LIO 一、Cartograph…...

绕WAF手法总结
云锁 被拦截 http://www.test123.com/article.php?id1%20union%20select%201,2,3 绕过 http://www.test123.com/article.php?id-1/*!36000union*//*!36000distinct*//*!36000select*/1,2,user() 360websec 被拦截 http://www.xxx.com.cn/productshow.php?id79 绕过 http:/…...