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

Elasticsearch学习笔记(1)

初识 Elasticsearch

认识和安装

Elasticsearch 是由 Elastic 公司开发的一套强大的搜索引擎技术,属于 Elastic 技术栈的一部分。完整的技术栈包括:

  • Elasticsearch:用于数据存储、计算和搜索。
  • Logstash/Beats:用于数据收集。
  • Kibana:用于数据可视化。

这套技术栈通常被称为 elastic stack (ELK),广泛应用于日志收集、系统监控和状态分析等场景。

而elasticsearch是elastic stack的核心,负责存储、搜索、分析数据。

核心组件

Elasticsearch 是整个技术栈的核心,提供了强大的数据存储、搜索和分析功能。

Kibana 是一个用于操作 Elasticsearch 的可视化控制台,它通过 RESTful API 与 Elasticsearch 进行交互,让用户能够更直观地管理和分析数据。Kibana 的主要功能包括:

  • 数据搜索与展示:支持对 Elasticsearch 数据的灵活搜索和展示。
  • 统计与聚合:能够对数据进行统计分析,并生成图表和报表。
  • 集群状态监控:提供对 Elasticsearch 集群健康状态的监控。
  • 开发控制台(DevTools):提供语法提示,帮助用户更方便地使用 Elasticsearch 的 RESTful API。

安装elasticsearch

通过下面的Docker命令(Windows 命令提示符)即可安装单机版本的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 hm-net ^-p 9200:9200 ^-p 9300:9300 ^elasticsearch:7.12.1

安装完成后,访问9200端口,即可看到响应的Elasticsearch服务的基本信息:

安装Kibana

通过下面的Docker命令(Windows 命令提示符),即可部署Kibana:

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

安装完成后,直接访问5601端口,即可看到控制台页面:

选择Explore on my own之后,进入主页面:

然后选中Dev tools,进入开发工具页面:

倒排索引

Elasticsearch 之所以能够提供高性能的搜索功能,主要归功于其底层的倒排索引技术。倒排索引是一种特殊的数据结构,它能够极大地提高文本搜索的效率。

正向索引

在传统的数据库系统中,如 MySQL,通常使用的是正向索引。正向索引是基于记录的 ID 或其他字段创建的索引。例如,给定一个商品表 tb_goods,如果为 id 字段创建索引,那么根据 id 查询时,可以直接通过索引快速定位到记录。

然而,如果需要根据 title 字段进行模糊查询,传统的正向索引就无法高效地处理。在这种情况下,数据库系统通常需要进行全表扫描,逐行检查 title 字段是否包含用户搜索的关键词。这种逐行扫描的方式在大数据量的情况下效率非常低下。

倒排索引

倒排索引是对正向索引的一种特殊处理,它将文档中的每个词条与包含该词条的文档进行关联。倒排索引中有两个核心概念:

  • 文档(Document):用于搜索的数据单元,例如一个网页、一个商品信息等。
  • 词条(Term):对文档数据或用户搜索数据进行分词后得到的具有含义的词语。例如,“我是中国人” 可以被分词为 “我”、“是”、“中国人”、“中国”、“国人” 等词条。

创建倒排索引的流程如下:

  1. 分词:将每个文档的数据进行分词,得到一个个词条。
  2. 创建索引表:创建一个表,每行数据包括词条、词条所在的文档 ID、词条在文档中的位置等信息。
  3. 索引优化:由于词条具有唯一性,可以为词条创建索引,例如使用哈希表结构索引。

倒排索引的搜索流程如下(以搜索 “华为手机” 为例):

  1. 分词:用户输入 “华为手机”,对其进行分词,得到词条 “华为” 和 “手机”。
  2. 查找词条:拿着词条在倒排索引中查找,得到包含这些词条的文档 ID。
  3. 获取文档:根据文档 ID 在正向索引中查找具体的文档。

通过倒排索引,搜索过程可以避免全表扫描,因为词条和文档 ID 都建立了索引,查询速度非常快。

正向索引与倒排索引的对比

正向索引:

优点:

  • 可以为多个字段创建索引。
  • 根据索引字段进行搜索和排序时速度非常快。

缺点:

  • 根据非索引字段或索引字段中的部分词条查找时,只能进行全表扫描。

倒排索引:

优点:

  • 根据词条进行搜索和模糊搜索时速度非常快。

缺点:

  • 只能为词条创建索引,而不是字段。
  • 无法根据字段进行排序。

总结来说,正向索引适用于精确查询和排序,而倒排索引则适用于全文搜索和模糊查询。Elasticsearch 通过结合这两种索引技术,提供了高效的全文搜索能力。

基础概念

Elasticsearch 中有许多独特的概念,与传统的关系型数据库(如 MySQL)有所不同,但也有相似之处。理解这些概念对于掌握 Elasticsearch 的使用至关重要。

文档和字段

Elasticsearch 是面向文档(Document)存储的,文档可以是数据库中的一条商品数据、一个订单信息等。文档数据会被序列化为 JSON 格式后存储在 Elasticsearch 中。

每个 JSON 文档中包含多个字段(Field),类似于数据库中的列。字段是文档的基本组成部分,每个字段都有其数据类型和值。

索引和映射

索引(Index)是相同类型的文档的集合。例如:

  • 所有用户文档可以组织在一起,称为用户的索引。
  • 所有商品的文档可以组织在一起,称为商品的索引。
  • 所有订单的文档可以组织在一起,称为订单的索引。

索引类似于数据库中的表。数据库的表会有约束信息,用来定义表的结构、字段的名称、类型等信息。因此,索引库中就有映射(Mapping),是索引中文档的字段约束信息,类似表的结构约束。

MySQL 与 Elasticsearch 的对比

以下是 MySQL 与 Elasticsearch 中一些关键概念的对比:

MySQLElasticsearch说明
TableIndex索引(Index)是文档的集合,类似数据库的表(Table)
RowDocument文档(Document)是一条条的数据,类似数据库中的行(Row),文档都是 JSON 格式
ColumnField字段(Field)是 JSON 文档中的字段,类似数据库中的列(Column)
SchemaMappingMapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)
SQLDSLDSL 是 Elasticsearch 提供的 JSON 风格的请求语句,用来操作 Elasticsearch,实现 CRUD
是否可以完全替代 MySQL?

虽然 Elasticsearch 在搜索和分析方面表现出色,但它并不能完全替代 MySQL。两者各有擅长之处:

  • MySQL:擅长事务类型操作,可以确保数据的安全和一致性。

  • Elasticsearch:擅长海量数据的搜索、分析、计算。

在企业中,通常会结合使用两者:

  • 对安全性要求较高的写操作,使用 MySQL 实现。

  • 对查询性能要求较高的搜索需求,使用 Elasticsearch 实现。

  • 两者再基于某种方式,实现数据的同步,保证一致性。

IK 分词器

Elasticsearch 的关键在于倒排索引,而倒排索引依赖于对文档内容的分词。分词是将文本数据分解为有意义的词条(Term)的过程。对于中文文本,由于中文没有像英文那样的自然分隔符(如空格),因此需要专门的中文分词算法。IK 分词器(IK Analyzer)就是这样一个高效、精准的中文分词工具。

安装 IK 分词器插件

IK 分词器是一个开源的中文分词插件,适用于 Elasticsearch。安装 IK 分词器可以显著提高中文文本的分词效果。以下是在 Windows 系统上安装 IK 分词器(IK Analyzer)的步骤:

方案一:在线安装

进入 Elasticsearch 容器

运行以下命令进入正在运行的 Elasticsearch 容器:

docker exec -it es /bin/bash

安装 IK 分词器插件:

在容器内部运行以下命令来安装 IK 分词器插件:

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

请注意,你需要将 7.12.1 替换为你正在使用的 Elasticsearch 版本号。

退出容器

安装完成后,退出容器:

exit

重启 Elasticsearch 容器

安装完成后,你需要重启 Elasticsearch 容器以使插件生效:

docker restart es
方案二:离线安装

下载 IK 分词器插件:

从 GitHub 页面下载 IK 分词器插件的压缩文件。

将插件文件上传到容器:

将下载的压缩文件上传到 Elasticsearch 容器的 /usr/share/elasticsearch/plugins 目录下。你可以使用 docker cp 命令来完成这个操作:

docker cp /path/to/elasticsearch-analysis-ik-7.12.1.zip es:/usr/share/elasticsearch/plugins/

进入 Elasticsearch 容器

运行以下命令进入正在运行的 Elasticsearch 容器:

docker exec -it es /bin/bash

解压插件文件

在容器内部解压插件文件:

cd /usr/share/elasticsearch/plugins
unzip elasticsearch-analysis-ik-7.12.1.zip
rm elasticsearch-analysis-ik-7.12.1.zip

退出容器

解压完成后,退出容器:

exit

重启 Elasticsearch 容器

安装完成后,你需要重启 Elasticsearch 容器以使插件生效:

docker restart es
IK分词器包含三种模式
  • standard:标准分词器
  • ik_smart:智能语义切分
  • ik_max_word:最细粒度切分

首先,测试 Elasticsearch 官方提供的标准分词器:

POST /_analyze
{"analyzer": "standard","text": "我是中国人"
}

执行结果如下:

{"tokens" : [{"token" : "我","start_offset" : 0,"end_offset" : 1,"type" : "<IDEOGRAPHIC>","position" : 0},{"token" : "是","start_offset" : 1,"end_offset" : 2,"type" : "<IDEOGRAPHIC>","position" : 1},{"token" : "中","start_offset" : 2,"end_offset" : 3,"type" : "<IDEOGRAPHIC>","position" : 2},{"token" : "国","start_offset" : 3,"end_offset" : 4,"type" : "<IDEOGRAPHIC>","position" : 3},{"token" : "人","start_offset" : 4,"end_offset" : 5,"type" : "<IDEOGRAPHIC>","position" : 4}]
}

可以看到,标准分词器只能 1 字 1 词条,无法正确对中文做分词。

接下来,测试 IK 分词器的 ik_smart 模式:

POST /_analyze
{"analyzer": "ik_smart","text": "我是中国人"
}

执行结果如下:

{"tokens" : [{"token" : "我","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "是","start_offset" : 1,"end_offset" : 2,"type" : "CN_CHAR","position" : 1},{"token" : "中国人","start_offset" : 2,"end_offset" : 5,"type" : "CN_WORD","position" : 2}]
}

最后,测试 IK 分词器的 ik_max_word 模式:

POST /_analyze
{"analyzer": "ik_max_word","text": "我是中国人"
}

执行结果如下:

{"tokens" : [{"token" : "我","start_offset" : 0,"end_offset" : 1,"type" : "CN_CHAR","position" : 0},{"token" : "是","start_offset" : 1,"end_offset" : 2,"type" : "CN_CHAR","position" : 1},{"token" : "中国人","start_offset" : 2,"end_offset" : 5,"type" : "CN_WORD","position" : 2},{"token" : "中国","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 3},{"token" : "国人","start_offset" : 3,"end_offset" : 5,"type" : "CN_WORD","position" : 4}]
}

IK 分词器的 ik_smart 模式适用于大多数场景,能够根据上下文进行智能分词;而 ik_max_word 模式则尽可能多地切分出词条,适用于需要更细粒度分词的场景。

拓展词典

进入容器后

cd /usr/share/elasticsearch/config/analysis-ik
ls

查看文件内容:

cat extra_main.dic

总结

分词器的作用是什么?

分词器在搜索引擎中有两个主要作用:

  • 创建倒排索引时,对文档分词:在索引阶段,分词器将文档内容分解成一个个的词条(tokens),并将这些词条与文档关联起来,形成倒排索引。倒排索引是搜索引擎的核心数据结构,用于快速查找包含特定词条的文档。
  • 用户搜索时,对输入的内容分词:在搜索阶段,分词器将用户输入的查询内容分解成一个个的词条,然后搜索引擎根据这些词条在倒排索引中查找匹配的文档。

IK 分词器有几种模式?

IK 分词器提供了两种分词模式:

  • ik_smart:智能切分,粗粒度:ik_smart 模式会进行智能切分,通常会生成较少的词条,适用于需要较粗粒度分词的场景。
  • ik_max_word:最细切分,细粒度:ik_max_word 模式会进行最细粒度的切分,尽可能生成更多的词条,适用于需要细粒度分词的场景。

IK 分词器如何拓展词条?如何停用词条?

IK 分词器可以通过配置文件 IKAnalyzer.cfg.xml 来拓展词条和停用词条。

拓展词条:

  • 在 IKAnalyzer.cfg.xml 文件中,通过 <entry key="ext_dict"> 标签指定拓展词典文件的路径。
  • 在拓展词典文件中添加你想要拓展的词条。

停用词条:

  • 在 IKAnalyzer.cfg.xml 文件中,通过 <entry key="ext_stopwords"> 标签指定停用词典文件的路径。
  • 在停用词典文件中添加你想要停用的词条。

示例配置

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

自定义词典文件 mydict.dic 示例

自定义词汇1
自定义词汇2

停用词典文件 stopword.dic 示例

的
是
在

相关文章:

Elasticsearch学习笔记(1)

初识 Elasticsearch 认识和安装 Elasticsearch 是由 Elastic 公司开发的一套强大的搜索引擎技术&#xff0c;属于 Elastic 技术栈的一部分。完整的技术栈包括&#xff1a; Elasticsearch&#xff1a;用于数据存储、计算和搜索。Logstash/Beats&#xff1a;用于数据收集。Kib…...

react是一种语言?

React 不是一种编程语言&#xff0c;而是一种用于构建用户界面的 JavaScript 库。它由 Facebook 开发&#xff0c;并广泛用于开发单页应用程序&#xff08;SPA&#xff09;。React 允许你将 UI 拆分成独立的、可复用的组件&#xff0c;这些组件可以接收输入&#xff08;称为“p…...

如何区分这个ip是真实ip,不是虚假的ip

区分一个IP地址是真实IP还是虚假IP&#xff08;伪造IP&#xff09;是非常重要的&#xff0c;特别是在网络安全、数据采集和其他与IP相关的业务场景中。虚假IP&#xff08;也称为伪造IP或假冒IP&#xff09;可以通过多种方式被创建&#xff0c;如代理、VPN、或IP欺骗&#xff08…...

【软件测试】详解软件测试中的测试级别

目录 一、测试级别二、组件测试三、开发者测试3.1测试与调试3.2 组件测试目标3.3 测试功能 四、稳健性测试4.1 效率的测试4.2 测试可维护性4.3 测试策略4.4 白盒测试 一、测试级别 软件系统通常是由许多子系统组成的&#xff0c;而这些子系统又是由多个组件组成的&#xff0c;…...

一条sql在MySQL中是怎么执行的

目录 一、MySQL总体架构二、各层的作用1、连接层2、应用层3、存储引擎层 一、MySQL总体架构 作为常问八股文&#xff0c;相信不少小伙伴当年都被问到过这个问题&#xff0c;回答这个问题我们首先得知道MySQL服务器基本架构&#xff0c;主要分为连接层&#xff0c;应用层和存储…...

Git | Dockerized GitLab 安装使用(简单实操版)

1. 详细步骤 1.1 安装启动 postgresql 服务 docker pull sameersbn/postgresql:14-20230628docker run --name gitlab-postgresql -d \--env DB_NAMEgitlabhq_production \--env DB_USERgitlab --env DB_PASSpassword \--env DB_EXTENSIONpg_trgm,btree_gist \--volume /srv/…...

SpringCloud简介 Ribbon Eureka 远程调用RestTemplate类 openfeign

〇、SpringCloud 0.区别于单体项目和soa架构&#xff0c;微服务架构每个服务独立&#xff0c;灵活。 1. spring cloud是一个完整的微服务框架&#xff0c;springCloud包括三个体系&#xff1a; spring cloud Netflix spring cloud Alibaba spring 其他 2.spring cloud 版本命名…...

微信小程序开发系列之-微信小程序性能优化

微信小程序开发系列之-微信小程序性能优化 性能优化是任何应用开发中的重要组成部分&#xff0c;尤其是在移动环境中。对于微信小程序而言&#xff0c;随着用户量的增加和应用功能的丰富&#xff0c;性能优化显得尤为关键。良好的性能不仅提升用户体验&#xff0c;还能增加用户…...

线程池面试集

目录 线程池中提交一个任务的流程是怎样的? 线程池有五种状态 如何优雅的停止一个线程? 线程池的核心线程数、最大线程数该如何设置? 如何理解Java并发中的可见性、原子性、有序性? Java死锁如何避免? 线程池中提交一个任务的流程是怎样的? 线程池有五种状态 如何优…...

从密码学看盲拍合约:智能合约的隐私与安全新革命!

文章目录 前言一、什么是盲拍合约&#xff1f;二、盲拍合约的优势1.时间压力的缓解2.绑定与秘密的挑战 三、盲拍合约的工作原理1.提交盲出价2.披露出价3.结束拍卖4.退款机制 四、代码示例总结 前言 随着区块链技术的发展&#xff0c;智能合约在各种场景中的应用越来越广泛。盲…...

c++学习笔记(47)

七、_public.cpp #include "_public.h" // 如果信号量已存在&#xff0c;获取信号量&#xff1b;如果信号量不存在&#xff0c;则创建它并初始化为 value。 // 如果用于互斥锁&#xff0c;value 填 1&#xff0c;sem_flg 填 SEM_UNDO。 // 如果用于生产消费者模型&am…...

软件设计之SSM(1)

软件设计之SSM(1) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版SSM框架全套视频教程&#xff0c;Spring6SpringBoot3最新SSM企业级开发 资料可以去尚硅谷官网免费领取 学习内容&#xff1a; Spring框架结构SpringIoC容器SpringIoC实践…...

STM32F745IE 能进定时器中断,无法进主循环

当你遇到STM32F745IE这类问题,即能够进入定时器中断但无法进入主循环(main() 函数中的循环),可能的原因和解决方法包括以下几个方面: 检查中断优先级和嵌套: 确保没有其他更高优先级的中断持续运行并阻止了主循环的执行。使用调试工具查看中断的进入和退出情况。检查中断…...

《凡人歌》中的IT职业启示录

《凡人歌》是由中央电视台、正午阳光、爱奇艺出品&#xff0c;简川訸执导&#xff0c;纪静蓉编剧&#xff0c;侯鸿亮任制片&#xff0c;殷桃、王骁领衔主演&#xff0c;章若楠、秦俊杰、张哲华、陈昊宇主演的都市话题剧 &#xff0c;改编自纪静蓉的小说《我不是废柴》。该剧于2…...

go libreoffice word 转pdf

一、main.go 关键代码 完整代码 package mainimport ("fmt""github.com/jmoiron/sqlx""github.com/tealeg/xlsx""log""os/exec""path/filepath" ) import _ "github.com/go-sql-driver/mysql"import &q…...

打造双模兼容npm包:无缝支持require与import

为了实现一个npm包同时支持require和import&#xff0c;你需要确保你的包同时提供了CommonJS和ES6模块的入口点。这通常是通过在package.json文件中指定main和module字段来实现的&#xff0c;以及在构建过程中生成两种不同模块格式的文件。 以下是具体步骤&#xff1a; 设置pa…...

便捷将屏幕投射到安卓/iOS设备-屏幕投射到安卓/iOS设备,Windows/Mac电脑或智能电视上-供大家学习研究参考

1. 下载并安装软件(安卓苹果都需要) 确保 Android 设备和 Windows/Mac电脑都安装。启动应用程序并将 Android 设备和 Windows / Mac 了解到同一个wifi下面。 2、 发起投屏请求 在接收设备上:...

yolox训练自己的数据集

环境搭建 gpu按自己情况安装 nvidia-smi 查看自己的版本 CUDA和cudnn 按自己的安装&#xff0c;我的驱动551.76&#xff0c;注意不要用最新的&#xff0c;官网只要求驱动是大于等于&#xff0c;可以用低版本的cuda&#xff0c;我安装的是CUDA 11.1 cuda下载后&#xff0c…...

Centos8.5.2111(1)之本地yum源搭建和docker部署与网络配置

由于后边可能要启动多个服务&#xff0c;避免服务之间相互干扰&#xff0c;本课程建议每个服务独立部署到一台主机上&#xff0c;这样做会导致资源占用过多&#xff0c;可能会影响系统的运行。服务器部署一般不采用GUI图形界面部署&#xff0c;而是采用命令行方式部署&#xff…...

基于SSM+小程序的自习室选座与门禁管理系统(自习室1)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 1、管理员实现了首页、基础数据管理、论坛管理、公告信息管理、用户管理、座位管理等 2、用户实现了在论坛模块通过发帖与评论帖子的方式进行信息讨论&#xff0c;也能对账户进行在线充值…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...