【ElasticSearch】基于Docker 部署 ElasticSearch 和 Kibana,使用 Kibana 操作索引库,以及实现对文档的增删改查

文章目录

  • 前言
  • 一、使用 Docker 部署 ElasticSearch 和 Kibana
    • 1.1 部署 ElasticSearch
    • 1.2 部署 Kibana
    • 1.3 利用 Kibana 演示 Elasticsearch 分词效果
  • 二、解决中文分词的问题
    • 2.1 默认分词器对中文分词的问题
    • 2.2 引入 IK 分词器
    • 2.3 IK 分词器的两种分词模式
    • 2.4 IK 分词器存在的问题
    • 2.5 IK 分词器拓展词库和停用词条
  • 三、使用 Kibana 操作索引库
  • 三、使用 Kibana 操作索引库
    • 3.1 Mapping 属性
    • 3.2 创建和获取索引
    • 3.3 修改索引库
    • 3.4 删除索引库
  • 四、使用 Kibana 实现对文档的增删改查
    • 4.1 新增文档
    • 4.2 获取和删除文档
    • 4.3 修改文档:全量修改和增量修改
    • 4.4 文档的版本号
    • 4.5 动态 Mapping 映射


前言

Elasticsearch 和 Kibana 是强大的工具,用于构建实时搜索和数据可视化解决方案。Elasticsearch 是一个分布式、高性能的搜索引擎,可以用于存储和检索各种类型的数据,从文本文档到地理空间数据。Kibana 则是 Elasticsearch 的可视化工具,用于实时分析和可视化大规模数据集。

在本文中,将探讨如何使用 Docker 进行快速部署 Elasticsearch 和 Kibana,搭建一个强大的搜索和分析平台。我们将从基础开始,逐步介绍如何配置和管理这两个工具,以满足不同应用场景的需求。随后,将重点关注使用 Kibana 操作索引库的各种任务,包括创建、获取、修改和删除索引。这些任务对于数据管理和搜索引擎的构建至关重要,将帮助您更好地组织和利用数据。

通过阅读本文,希望能够帮助我们掌握 Elasticsearch 和 Kibana 的核心概念,具备构建强大搜索引擎和可视化工具的能力,以及解决中文分词和文档管理方面的专业知识。

一、使用 Docker 部署 ElasticSearch 和 Kibana

因为需要使用 Docker 部署 ElasticSearch 和 Kibana ,并且它们相互之间需要进行网络通信,所有首先创建一个虚拟网络,然后在运行容器的时候,加入这个网络即可。

docker network create es-net

1.1 部署 ElasticSearch

  1. 获取 ElasticSearch 镜像:

首先我们需要从 DockerHub 中拉取 ElasticSearch 镜像:

DockerHup 地址:https://hub.docker.com/_/elasticsearch。

docker pull elasticsearch

注意,ElasticSearch 的镜像体积比较大,如果能找到镜像的tar包的话,最好使用tar包加载。此时我使用的是 7.12.1版本的镜像:

使用命令加载这个 tar 包:

docker load -i es.tar
  1. 运行 ElasticSearch 容器

运行 Docker 命令,部署单点的 ElasticSearch 服务:

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:7.12.1

上述 Docker 命令是为了运行 Elasticsearch 容器。下面是对命令的解释:

  1. docker run -d 这部分表示在后台运行容器。

  2. --name es 为容器指定一个名字,这里是 “es”。

  3. -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" 设置 Java 虚拟机的参数,包括初始堆内存大小 (-Xms) 和最大堆内存大小 (-Xmx),这里都设置为 512MB。

  4. -e "discovery.type=single-node" 设置 Elasticsearch 的节点发现机制为单节点,因为在这个配置中只有一个 Elasticsearch 实例。

  5. -v es-data:/usr/share/elasticsearch/data 将容器内 Elasticsearch 的数据目录挂载到宿主机的名为 “es-data” 的卷上,以便数据持久化。

  6. -v es-plugins:/usr/share/elasticsearch/plugins 类似上面,将容器内 Elasticsearch 的插件目录挂载到宿主机的名为 “es-plugins” 的卷上。

  7. --privileged 赋予容器一些特权,可能会有一些安全风险,需要慎用。

  8. --network es-net 将容器连接到名为 “es-net” 的网络上,目的是为了与其他容器进行通信。

  9. -p 9200:9200 -p 9300:9300 将容器内部的端口映射到宿主机上,这里分别是 Elasticsearch 的 HTTP REST API 端口(9200)和节点间通信的端口(9300)。

  10. elasticsearch:7.12.1 指定要运行的 Docker 镜像的名称和版本号,这里是 Elasticsearch 7.12.1 版本。

这个命令配置了 ElasticSearch 的运行参数、数据卷、网络等,使其能够在后台运行,并且可以通过指定的端口访问 Elasticsearch 的 API。

当运行完这个命令之后,我们可以在浏览器中访问 宿主机IP:9200,即可看到 ElasticSearch 的响应结果:

1.2 部署 Kibana

  1. 获取 Kibana 镜像

Kibana 是 Elastic 官方提供的一个 ElasticSearch 的可视化界面,通过这个界面可以更好地对 ElasticSearch 进行操作。

想要使用 Docker 部署 Kibana,首先同样需要从 DockerHub 中获取镜像:

DockerHub:https://hub.docker.com/_/kibana。

docker pull kibana

同样的,Kibana 镜像的大小也超过了一个 G,因此如果能找到 tar 的话,尽量使用 load 获取镜像:

docker load -i kibana
  1. 运行 Kibana 容器

使用 Docker 命令运行 Kibana 容器:

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1

这 Docker 命令是为了运行 Kibana 容器,它与 Elasticsearch 一同组成了 ELK(Elasticsearch, Logstash, Kibana)技术栈的一部分。下面是对命令各个部分的解释:

  1. docker run -d 在后台运行容器。

  2. --name kibana 为容器指定一个名字,这里是 “kibana”。

  3. -e ELASTICSEARCH_HOSTS=http://es:9200 设置 Kibana 运行时连接的 Elasticsearch 节点的地址,这里指定了 Elasticsearch 服务的地址为 http://es:9200,其中 “es” 是 Elasticsearch 服务的容器名,而不是具体的 IP 地址。这是因为在 --network=es-net 中指定了容器连接到 “es-net” 网络,容器名会被解析为相应的 IP 地址。

  4. --network=es-net 将容器连接到名为 “es-net” 的网络上,确保 Kibana 能够与 Elasticsearch 容器进行通信。

  5. -p 5601:5601 将容器内部的 5601 端口映射到宿主机上,允许通过宿主机的 5601 端口访问 Kibana 的 Web 界面。

  6. kibana:7.12.1 指定要运行的 Docker 镜像的名称和版本号,这里是 Kibana 7.12.1 版本。

这个命令会在启动 Kibana 的同时连接到 Elasticsearch 服务,并映射 Kibana 的 Web 界面端口到宿主机,以便通过浏览器访问 Kibana 的用户界面进行 Elasticsearch 数据的可视化和管理。

当运行了这个命令之后,可以在浏览器中访问 宿主机IP:5601,然后就会进入 Kibana 的可视化界面:

1.3 利用 Kibana 演示 Elasticsearch 分词效果

在 Kibana 的可视化界面中,提供了一个 DevTools,在这个界面中我们就可以来编写 DSL 命令来操作 ElasticSearch,并且对 DSL 语句有提示和自动补全功能。

1. 打开 Kibana DevTools

首先,在 Kibana 的界面中找到左侧导航栏中的 “DevTools”,点击进入 DevTools 页面。

2. 编写分词演示 DSL 命令

在 DevTools 中,我们可以直接编写 DSL(Domain Specific Language,领域特定语言)命令来与 Elasticsearch 进行交互。以下是一个简单的演示,我们将使用 analyze API 来查看文本在分词阶段的效果。

什么是 DSL?
领域特定语言(Domain-Specific Language,DSL)是一种专注于解决特定问题领域的编程语言。与通用编程语言(如Java、Python)不同,DSL 被设计用来解决某一领域的具体问题,通常具有更高的表达能力和更简洁的语法。

例如,现在使用了 standard 分析器,它是 Elasticsearch 默认的分析器之一。要分析的文本是 “Elasticsearch is a powerful search engine.”。

POST _analyze
{"analyzer": "standard","text": "Elasticsearch is a powerful search engine."
}

点击三角符号向 ElasticSearch 服务发送 HTTP 请求:

  1. 查看分词效果


上述结果显示了文本被分解成了多个词条(tokens),每个词条都有其在文本中的起始和结束位置。这样的分析对于搜索引擎来说是关键的,因为它决定了搜索时如何匹配文本。

另外,Elasticsearch 支持多种分析器,如:simplewhitespaceenglish 等,每个分析器有其自己的特性。选择不同的分词器,分词所得的结果也会有所不同。

二、解决中文分词的问题

2.1 默认分词器对中文分词的问题

在 Elasticsearch 中,默认的分词器在处理中文文本时可能会遇到一些问题,无法很好地将中文文本切分成有意义的词条。

例如下面的例子:

POST _analyze
{"analyzer": "standard","text": "Elasticsearch 是一个强大的搜索引擎。"
}

使用上面的 DSL 语句得到的分词结果为:


此时发现,对于中文的分词是一个字就被分成了一个词条,要解决这个问题可以使用 IK 分词器。

2.2 引入 IK 分词器

当需要处理中文分词使,一般都会使用 IK 分词器。

项目下载地址: https://github.com/medcl/elasticsearch-analysis-ik。

为 ElasticSearch 引入 IK 分词器有两种方法:

1. 在线按照 IK 插件

按照的步骤和命令如下:

a)进入 ElasticSearch 容器内部

docker exec -it elasticsearch /bin/bash

b)在线下载并安装

./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip

c)退出 ElasticSearch 容器

exit

d)重启 ElasticSearch 容器

docker restart elasticsearch

2. 离线按照 IK 插件

a)查看数据卷目录

安装插件需要知道 ElasticSearch 的plugins目录位置,我们中运行 ES 容器的时候实现了数据卷的挂载,因此需要查看 ES 容器的数据卷目录,通过下面命令查看:

 docker volume inspect es-plugins

b)进入挂载目录,然后之间将下载好的 IK 插件解压重命名后放到这个挂载目录下

c)重启 ES 容器

docker restart es

通过命令 docker logs -f es 查看 ES 容器的启动日志,就可以发现已经成功加载了 IK 分词器:

2.3 IK 分词器的两种分词模式

IK 分词器是一款专为中文文本设计的分词器,在 Elasticsearch 中包含两种主要的分词模式:ik_smartik_max_word。这两种模式在分词的细粒度上有所不同,适用于不同的应用场景。

下面演示两种模式的区别:

a)ik_smart 模式

DSL 语句:

POST _analyze
{"analyzer": "ik_smart","text": "Elasticsearch 是一个强大的搜索引擎。"
}

分词结果:

ik_smart 模式下,IK 分词器会进行最少切分,尽量保留专有名称和词组,以提高整体的可读性。

b)ik_max_word模式

DSL 语句:

POST _analyze
{"analyzer": "ik_max_word","text": "Elasticsearch 是一个强大的搜索引擎。"
}

分词结果:


ik_max_word 模式下,IK 分词器会进行最细粒度的切分,尽量将文本拆分成单个词语,包括专有名称的切分。例如,对于 “搜索引擎”来说还进一步细分成了:“搜索”、“索引”、“引擎”。

2.4 IK 分词器存在的问题

尽管 IK 分词器可以针对中文进行分词,但是随着互联网的不断发展,越来越多的网络用语和新的词汇在不断的产生,例如下面的例子:

POST _analyze
{"analyzer": "ik_smart","text": "鸡你太美,鸡哥,坤坤,奥利给,啦啦啦,么么么,哒哒哒"
}

此时对于上述词汇的分词结果为:

通过这个结果可以发现,IK 分词器并不能对新的网络用语进行分词,并且一些语气词也需要参与分词。

2.5 IK 分词器拓展词库和停用词条

要解决上面使用 IK 分词器存在的问题可以对词典进行拓展和停用一些不必要或者敏感的词汇。

拓展词库:

要拓展 IK 分词器的词库,只需要修改 IK 分词器目录中的config目录下的IkAnalyzer.cfg.xml文件:

<?xml version="1.0" 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>

然后在名为ext.dic的文件中,添加想要拓展的词语即可:

停用词条:

要禁用某些不需要参与分词或者某些敏感词条,也是需要修改 IK 分词器目录中的config目录中的IkAnalyzer.cfg.xml文件:

<?xml version="1.0" 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><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords">stopword.dic</entry>
</properties>

然后在名为stopword.dic的文件中,添加想要停用的词语即可:

配置完成,重启 ES 容器,再次运行刚才的 DSL 语句:

POST _analyze
{"analyzer": "ik_smart","text": "鸡你太美,鸡哥,坤坤,奥利给,啦啦啦,么么么,哒哒哒"
}

此时的运行结果:


至此,就成功为 IK 分词器拓展和停用了词条。

三、使用 Kibana 操作索引库

三、使用 Kibana 操作索引库

3.1 Mapping 属性

在使用 Kibana 操作索引库之前,了解索引的 mapping 属性是非常重要的。Mapping 是对索引库中文档的结构和字段的约束,它定义了文档中每个字段的数据类型、分词器等属性。以下是一些常见的 mapping 属性:

1. type 字段数据类型

  • 字符串类型:

    • text:用于存储可分词的文本,通常用于全文搜索。
    • keyword:精确匹配的关键字,不分词,常用于过滤、聚合等场景。
  • 数值类型:

    • long, integer, short, byte, double, float:用于存储数值。
  • 布尔类型:

    • boolean:存储布尔值。
  • 日期类型:

    • date:存储日期和时间。
  • 对象类型:

    • object:存储复杂结构的对象。

2. index 是否创建索引

  • 默认为 true,表示创建索引。可以设置为 false,表示不创建索引,该字段不可搜索。

3. analyzer 使用的分词器

  • 定义字段使用的分词器,影响搜索和分词行为。

4. properties 子字段

  • 如果字段是对象类型,可以定义子字段的 mapping。

示例:

PUT /my_index
{"mappings": {"properties": {"title": {"type": "text","analyzer": "standard"},"price": {"type": "double"},"is_available": {"type": "boolean"},"created_at": {"type": "date"},"category": {"type": "keyword"},"details": {"type": "object","properties": {"description": {"type": "text"},"manufacturer": {"type": "keyword"}}}}}
}

上述示例定义了一个索引的 mapping,包含了不同类型的字段以及它们的属性。理解 mapping 对于在 Kibana 中正确操作索引非常重要,它影响了索引中文档的结构和 Elasticsearch 的行为。

3.2 创建和获取索引

在 Elasticsearch 中,创建和获取索引是操作索引库的基本步骤之一。下面是如何在 Kibana 中执行 DSL 代码来创建和获取索引的详细说明:

  1. 创建索引

DSL 代码:

PUT /demo
{"mappings": {"properties": {"info": {"type": "text","analyzer": "ik_smart"},"email":{"type": "keyword","index": false},"name":{"properties": {"firstName":{"type":"keyword"},"lastName":{"type":"keyword"}}}}}
}

说明:

  • 使用 PUT 请求创建一个名为 demo 的索引库。
  • mappings 中定义了不同字段的属性,如 info 使用了中文分词器 ik_smart
  • email 字段设置了 indexfalse,表示不对该字段创建索引,该字段不可搜索。
  • name 字段是一个对象类型,包含 firstNamelastName 两个子字段。

执行结果:

在 Kibana 的 DevTools 中执行上述代码,会成功创建名为 demo 的索引库。

创建索引结果

  1. 获取索引

DSL 代码:

GET /索引名

说明:

  • 使用 GET 请求获取名为 demo 的索引库的信息。

执行结果:

在 Kibana 的 DevTools 中执行上述代码,会获取刚刚创建的 demo 索引的信息。

获取索引结果

通过以上步骤,可以成功创建索引并获取索引的信息。在实际应用中,创建和管理索引是构建 Elasticsearch 数据结构的基础,对于数据的存储和检索具有重要作用。

3.3 修改索引库

在 Elasticsearch 中,一旦索引库和其对应的 mapping 创建后,mapping 一般无法直接修改。但是,我们可以通过添加新的字段的方式来间接修改索引库。下面是具体的操作步骤:

DSL 代码:

PUT /demo/_mapping
{"properties": {"age": {"type": "integer"}}
}

说明:

  • 使用 PUT 请求修改 demo 索引库的 mapping。
  • properties 中定义了一个新的字段 age,数据类型为 integer

执行结果:

在 Kibana 的 DevTools 中执行上述代码,成功为 demo 索引库添加了一个新的字段 age

修改索引库结果

通过这种方式,我们可以对索引库进行修改,添加新的字段,以满足数据结构的演进和变化需求。需要注意的是,对于已经存在的文档,新添加的字段默认是 null 或者空值,具体行为取决于字段的数据类型。

3.4 删除索引库

在 Elasticsearch 中,如果需要删除一个索引库,可以使用 DELETE 请求。以下是删除 demo 索引库的操作步骤:

DSL 代码:

DELETE /demo

执行结果:

在 Kibana 的 DevTools 中执行上述代码,成功删除了名为 demo 的索引库。

删除索引库结果

注意:

  • 删除索引库是一个慎重的操作,会删除索引库中的所有数据和 mapping。
  • 如果尝试获取已删除的索引,将会得到 404 错误。

通过删除索引库,可以清空数据和结构,适用于重新创建索引或者不再需要的索引的情况。

四、使用 Kibana 实现对文档的增删改查

4.1 新增文档

在 Elasticsearch 中,新增文档是将数据存储到索引库中的过程。以下是在 Kibana DevTools 中使用 DSL 语法新增文档的详细说明:

DSL 代码:

POST /demo/_doc/1
{"info": "五虎上将之一","email": "zy@demo.cn","name": {"firstName": "云","lastName": "赵"},"age": 18
}

说明:

  • 使用 POST 请求将文档新增到 demo 索引库中。
  • _doc 表示文档类型,1 是文档的唯一标识符。
  • 文档内容包括字段 infoemailnameage

执行结果:

在 Kibana 的 DevTools 中执行上述代码,成功新增了一个文档到 demo 索引库中。

新增文档结果

通过新增文档,可以将数据灵活地存储到 Elasticsearch 中,以便后续的检索和分析。

4.2 获取和删除文档

1. 获取文档

语法:

GET /索引库名/_doc/文档id 

例如,获取刚才新增的文档:

GET /demo/_doc/1

执行结果:

获取文档结果

2. 删除文档

删除文档使用的方法是 DELETE,DSL 语法如下:

DELETE /索引库名/_doc/文档id

例如,删除刚才新增的文档:

DELETE /demo/_doc/1

文档删除成功后,Elasticsearch 会返回一个包含删除信息的 JSON 响应。通过上述操作,我们可以灵活地对文档进行获取和删除,适用于不同的数据管理需求。

4.3 修改文档:全量修改和增量修改

在 Elasticsearch 中,对文档的修改主要分为全量修改和增量修改两种方式。

1. 全量修改

全量修改使用的方法是 PUT,它会删除旧文档并添加新文档。全量修改的语法如下:

PUT /索引库名/_doc/文档id
{"字段1": "值1","字段2": "值2",// ... 省略
}

例如,对刚才新增的文档进行全量修改:

PUT /demo/_doc/1
{"info": "五虎上将之一","email": "ZhaoYun@demo.cn","name": {"firstName": "云","lastName": "赵"},"age": 18
}

执行结果如下:

全量修改结果

实际上,全量修改相当于删除原有的文档内容,然后进行新增操作。因此,此处 PUT 的作用也相当于新增。

** 2. 增量修改**

增量修改使用的方法是 POST,它可以修改指定字段的值。增量修改的语法如下:

POST /索引库名/_update/文档id
{"doc": {"字段名": "新的值",}
}

例如,对刚才新增的文档进行增量修改:

POST /demo/_update/1
{"doc":{"email":"ZYun@demo.cn"}
}

执行结果如下:

增量修改结果

通过上述操作,我们可以实现对文档内容的全量修改和增量修改,具体选择哪种方式取决于业务需求和数据管理的策略。全量修改适用于需要更新整个文档内容的场景,而增量修改则更灵活,可以选择性地更新部分字段。

4.4 文档的版本号

什么是文档的版本号:

在 Elasticsearch 中,每个文档都有一个版本号(version),用于标识文档的变更历史。当对文档进行修改时,版本号会随之递增,每次修改都会生成一个新的版本。

为什么需要文档的版本号:

文档的版本号在并发写入和更新的场景中起到了重要的作用。当多个客户端同时尝试修改同一文档时,通过版本号可以确保写入的顺序和一致性。在分布式系统中,版本号还用于控制数据的一致性和冲突解决。

例如,对于 id 为 1 的文档:

1. 新增时,_version 为 1

2. 第一次修改后,_version 变为 2

3. 再次修改后,_version 变为 3

通过上面的操作,可以发现一个规律。那就是每修改一次文档,那么该文档的版本号就会加 1。

版本号的作用:

版本号在处理并发写入、更新和冲突解决时非常重要。通过版本号,Elasticsearch 可以确保在并发修改的情况下,数据的一致性和正确性。当多个客户端尝试修改同一文档时,只有最新的版本会被接受,避免了数据的混乱和冲突。

版本号的使用让 Elasticsearch 成为一个强大的分布式数据库,能够处理大规模的并发写入和更新操作。

4.5 动态 Mapping 映射

在 Elasticsearch 中,我们有时会遇到需要向索引中添加新字段的情况。这就涉及到了动态 Mapping 映射的概念。动态 Mapping 是 Elasticsearch 在插入文档时自动识别字段类型并进行映射的机制。

让我们通过一个具体的例子来说明动态 Mapping 的工作原理。假设我们向索引中插入以下文档:

PUT /demo/_doc/2
{"info": "五虎上将之一","email": "zf@demo.cn","name": {"firstName": "飞","lastName": "张"},"age": 35,"score": [98.5, 98.9, 97.9, 99.2],"isMarried": false,"birthday": "1988-05-20","city": "上海"
}

执行结果:

这个文档中包含了索引中之前未见过的字段,例如 scoreisMarriedbirthdaycity。然而,Elasticsearch 并没有报错,而是成功插入了文档。这是因为 Elasticsearch 会自动进行动态 Mapping 映射。

动态 Mapping 映射的规则如下:

JSON类型Elasticsearch类型
字符串日期格式字符串:date 类型;普通字符串:text 类型,并添加 keyword 类型子字段
布尔值boolean 类型
浮点数float 类型
整数long 类型
对象嵌套object 类型,并添加 properties
数组由数组中的第一个非空类型决定
空值将被忽略

通过动态 Mapping,Elasticsearch 能够灵活地处理文档中新增的字段,为我们提供了方便和便利。这种功能使得 Elasticsearch 能够智能地适应不断变化的数据结构,为索引的管理提供了灵活性。

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

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

相关文章

时空智友企业流程化管控系统 sessionid泄露漏洞 复现

文章目录 时空智友企业流程化管控系统 sessionid泄露漏洞 复现0x01 前言0x02 漏洞描述0x03 影响平台0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 时空智友企业流程化管控系统 sessionid泄露漏洞 复现 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技术从…

Javascript笔记 rest VS spread

1 rest 2 spread 3 二者区别 在 JavaScript 中&#xff0c;spread 操作符 ... 和 rest 参数都使用三个点 ... 作为前缀&#xff0c;但它们在使用上有一些区别&#xff0c;主要体现在它们的作用和使用场景上。 Spread 操作符 ... 作用&#xff1a; "展开"数组或对象的…

无需公网IP,教学系统如何实现远程一站式管理维护?

全国多所高校应用红亚科技研发的一套教学实验系统平台&#xff0c;此实验系统服务器分别部署在学校内部&#xff0c;与校内的各种教学资源整合在一起&#xff0c;向校内师生提供服务。 红亚总部设立在北京&#xff0c;虽说在全国22个省会均设有办事处&#xff0c;在面对全国多…

多路彩灯控制器led流水灯VHDL速度可调仿真图视频、源代码

名称&#xff1a;多路彩灯控制器led流水灯VHDL速度可调 软件&#xff1a;Quartus 语言&#xff1a;VHDL 代码功能&#xff1a; 使用VHDL设计彩灯控制器&#xff0c;共24个led灯&#xff0c;分为5种不同的花样&#xff0c;可以通过按键切换花样的变化速度。 代码下载&#…

阿里云轻量应用服务器月流量限制说明(部分套餐不限流量)

阿里云轻量应用服务器部分套餐限制月流量&#xff0c;轻量应用服务器按照套餐售卖&#xff0c;有的套餐限制月流量&#xff0c;有的不限制流量。像阿里云轻量2核2G3M带宽轻量服务器一年108元和轻量2核4G4M带宽一年297.98元12个月&#xff0c;这两款是不限制月流量的。阿里云百科…

【虹科分享】什么是Redis数据集成(RDI)?

大量的应用程序、日益增长的用户规模、不断扩展的技术需求&#xff0c;以及对即时响应的持续追求。想想这些是否正是你在经历的。也许你尝试过自己构建工具来应对这些需求&#xff0c;但是大量的编码和集成工作使你焦头烂额。那你是否知道&#xff0c;有这样一个工具可以帮助你…

计算机竞赛 目标检测-行人车辆检测流量计数

文章目录 前言1\. 目标检测概况1.1 什么是目标检测&#xff1f;1.2 发展阶段 2\. 行人检测2.1 行人检测简介2.2 行人检测技术难点2.3 行人检测实现效果2.4 关键代码-训练过程 最后 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 行人车辆目标检测计数系统 …

用合成数据训练车辆姿态估计神经网络

我们的客户希望开发一款应用程序&#xff0c;引导用户通过 AR 指南和自动照片拍摄来拍摄更高质量的汽车照片。 本文重点介绍构建汽车姿态估计组件的技术。 在应用程序中&#xff0c;用户被引导站在与汽车一定的角度和距离&#xff0c;以标准化的方式捕捉最好的照片。 当用户处于…

VR酒店虚拟仿真情景实训教学演示

在传统的酒店管理教学过程中&#xff0c;学生往往缺乏实践操作经验&#xff0c;难以将理论知识与实际工作相结合。而VR酒店虚拟仿真情景实训教学应用可以为学生提供一个逼真的、沉浸式的酒店管理环境&#xff0c;使学生能够在模拟实践中掌握酒店管理的各项技能。 VR酒店虚拟仿真…

pip 清华镜像

python -m pip install --upgrade pip pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pypi | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

dom-to-image库是如何将html转换成图片的

dom-to-image库可以帮你把dom节点转换为图片&#xff0c;它的核心原理很简单&#xff0c;就是利用svg的foreignObject标签能嵌入html的特性&#xff0c;然后通过img标签加载svg&#xff0c;最后再通过canvas绘制img实现导出&#xff0c;好了&#xff0c;本文到此结束。 另一个…

[NISACTF 2022]hardsql - quine注入

[NISACTF 2022]hardsql 一、思路分析二、解题方法 一、思路分析 题目描述&#xff1a;$password$_POST[passwd]; $sql"SELECT passwd FROM users WHERE usernamebilala and passwd$password;"; 从描述看出是quine注入&#xff0c;且用户名要是bilala 1、经测试&…

使用 TensorFlow 创建 DenseNet 121

一、说明 本篇示意DenseNet如何在tensorflow上实现&#xff0c;DenseNet与ResNet有类似的地方&#xff0c;都有层与层的“短路”方式&#xff0c;但两者对层的短路后处理有所不同&#xff0c;本文遵照原始论文的技术路线&#xff0c;完整复原了DenseNet的全部网络。 图1&#x…

Java @Override 注解

在代码中&#xff0c;你可能会看到大量的 Override 注解。 这个注解简单来说就是让编译器去读的&#xff0c;能够避免你在写代码的时候犯一些低级的拼写错误。 Java Override 注解用来指定方法重写&#xff08;Override&#xff09;&#xff0c;只能修饰方法并且只能用于方法…

怎么将Linux上的文件上传到github上

文章目录 1. 先在window浏览器中创建一个存储项目的仓库2. 复制你的ssh下的地址1) 生成ssh密钥 : 在Linux虚拟机的终端中,运行以下命令生成ssh密钥2)将ssh密钥添加到github账号 : 运行以下命令来获取公钥内容: 3. 克隆GitHub存储库&#xff1a;在Linux虚拟机的终端中&#xff0…

leetcode42 接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高…

Golang网络编程:即时通讯系统Instance Messaging System

系统基本架构 版本迭代 项目改造 无人机是client&#xff0c;我们是server&#xff0c;提供注册登入&#xff0c;场景选择等。信道模拟器是server&#xff0c;我们是client&#xff0c;我们向信道模拟器发送数据&#xff0c;等待信道模拟器计算结果&#xff0c;返回给无人机。…

使用ChatGPT和MindShow一分钟生成PPT模板

对于最近学校组织的实习答辩&#xff0c;由于时间太短了&#xff0c;而且小编也特别的忙&#xff0c;于是就用ChatGPT结合MindShow一分钟快速生成PPT&#xff0c;确实很实用。只要你跟着小编后面&#xff0c;你也可以快速制作出这个PPT&#xff0c;下面小编就来详细介绍一下&am…

联想M7216NWA一体机连接WiFi及手机添加打印机方法

联想M7216NWA一体机连接WiFi方法&#xff1a; 1、首先按打印机操作面板上的“功能键”&#xff1b;【用“”&#xff08;上翻页&#xff09;“-”&#xff08;下翻页&#xff09;来选择菜单的内容】 2、下翻页键找到并选择“网络”&#xff0c;然后“确认键”&#xff1b; 3…

自动驾驶技术的基础知识

自动驾驶技术是现代汽车工业中的一项革命性发展&#xff0c;它正在改变着我们对交通和出行的理解。本文将介绍自动驾驶技术的基础知识&#xff0c;包括其概念、历史发展、分类以及关键技术要素。 1. 自动驾驶概念 自动驾驶是一种先进的交通技术&#xff0c;它允许汽车在没有人…