Elasticsearch 入门教程

news2025/1/8 4:08:38

掌握Elasticsearch:从入门到入门

  • 一、ES 背景
    • 1.1 ElasticSearch 的背景
    • 1.2 ElasticSearch 的应用场景
  • 二、ES 简介
    • 2.1 ElasticSearch 简介
    • 2.2 ElasticSearch 的定义与特点
    • 2.3 ElasticSearch 与传统数据库的区别
    • 2.4 ElasticSearch 的优势和劣势
  • 三、ES 的核心概念
    • 3.1 倒排索引
    • 3.2 文档、索引与类型
    • 3.3 分片与副本
  • 四、安装与配置
    • 4.1 下载与安装 ElasticSearch
    • 4.2 常见配置项解析
  • 五、数据索引与搜索
    • 5.1 创建索引与插入文档
    • 5.2 执行基本搜索操作
    • 5.3 Query DSL 查询语法解析

 Logo

一、ES 背景

1.1 ElasticSearch 的背景


  Elasticsearch 是一个开源的分布式搜索引擎,最初由 Shay Banon 在 2010 年创建。它是基于 Apache Lucene 构建的,旨在提供一个简单易用、高度可扩展的搜索和分析引擎。Elasticsearch 的目标是解决传统数据库系统无法处理的大规模数据搜索和分析问题,它能够快速地索引大量的数据,并通过复杂的查询实现高效的搜索和分析功能。此外,Elasticsearch 拥有强大的聚合功能,可以从海量数据中提取有用的信息。

1.2 ElasticSearch 的应用场景


  ElasticSearch 应用于多个领域,包括但不限于:

  • 搜索引擎:构建网站、应用程序和企业内部系统的搜索功能。
  • 实时日志和指标分析:实时索引和分析大量日志数据,帮助监控系统运行状况。
  • 安全信息和事件管理 (SIEM):监视、分析和应对安全威胁。
  • 业务分析和智能推荐:支持复杂的数据聚合和分析操作。
  • 地理空间数据分析:处理和分析地理空间数据。
  • 文档存储和管理:作为文档存储和检索平台。

  ElasticSearch 适用于需要大规模、实时搜索和分析功能的场景,以及需要处理结构化和非结构化数据的应用程序和系统。

二、ES 简介

2.1 ElasticSearch 简介


  Elasticsearch 是一个分布式文档储存中间件,它不会将信息存储为列数据行,而是存储已序列化为 JSON 文档的复杂数据结构。Elasticsearch 是基于 Apache Lucene 搜索引擎库所构建的全套搜索功能。
  Elasticsearch 使用一种被称为倒排索引的数据结构,该结构支持快速全文搜索

2.2 ElasticSearch 的定义与特点


  ElasticSearch 是一个开源的分布式搜索和分析引擎,具有以下主要特点:

  1. 分布式性:能够水平扩展以处理大规模数据,并提供高可用性和容错性。
  2. 实时性:支持实时索引和查询,适用于需要快速响应的应用场景。
  3. 全文搜索:提供全文搜索功能,支持多语言、复杂查询和相关性排序等特性。
  4. 复杂查询:支持复杂的结构化查询和聚合操作,包括范围查询、多字段查询、过滤、分组和统计等。
  5. 多样化数据类型:支持处理结构化数据、半结构化数据和非结构化数据,包括文本、地理空间数据等。
  6. 弹性和灵活性:适应各种数据模型和查询需求,可灵活定制索引结构和分析器
  7. 生态系统丰富:与 LogstashKibana 等工具继承,形成 ELKElasticSearchLogstashKibana)技术栈,提供完整的日志分析和可视化解决方案。

2.3 ElasticSearch 与传统数据库的区别


特点Elasticsearch传统数据库
数据存储方式非结构化/半结构化/全文搜索结构化数据
查询处理复杂的全文搜索和聚合查询简单的 SQL 查询
可扩展性易于水平扩展通常需要垂直扩展
实时性支持实时索引和查询对实时需求支持相对较弱
相关性排序支持相关性排名和评分不太适用于全文搜索
数据类型适用于多样化数据类型主要适用于结构化数据
分布式处理分布式、高可用性和容错性通常以集中式方式部署

2.4 ElasticSearch 的优势和劣势


优势

  1. 全文搜索能力:强大的全文搜索功能,支持复杂的查询和相关性排序。
  2. 分布式架构:具有良好的水平扩展性和高可用性,适合处理大规模数据。
  3. 实时性:支持实时索引和查询,适用于需要快速响应的应用场景。
  4. 多样化数据类型:能够处理非结构化、半结构化和结构化数据,包括文本、地理空间数据等。
  5. 灵活性:能够适应各种数据模型和查询需求,提供丰富的定制化配置选项。
  6. 开源和生态系统:作为开源项目,具有庞大的社区支持和丰富的生态系统,整合了许多其他开源工具。

劣势

  1. 学习曲线:对于新用户而言,可能需要一定时间来熟悉其复杂的查询语言和配置选项。
  2. 资源消耗:在处理高负载和复杂查询时,可能需要更多的硬件资源和系统维护成本。
  3. 非实时聚合计算:对于复杂的聚合计算,可能不如专门的数据仓库或计算引擎效率高。
  4. 不适合事务处理:相较于传统关系型数据库,Elasticsearch 不适合处理需要严格事务控制的应用场景。

三、ES 的核心概念


Core Concepts

3.1 倒排索引


  倒排索引是一种索引数据结构,它将存储的信息从“ 文档到词 ”的映射转换为“ 词到文档 ”的映射。简单来说,就是对于每一个不同的词,记录包含该词的所有文档的列表。这种结构非常适合用于全文搜索,因为当你知道要查找哪个词时,可以非常快地找到包含这个词的所有文档。

构建倒排索引的过程

  1. 分词:首先,输入的文档内容会被分词器(Tokenizer)分解成单独的词汇或术语(terms)。例如,句子“Quick brown fox”可能被分解为三个词:“Quick”,“brown”和“fox”。
  2. 分析:接下来,这些词汇会经过一系列的分析步骤,比如去除停用词(如 “the”, “is” 等)、词干提取(stemming)或者词性还原(lemmatization)等,以便减少词汇变体并提高搜索的相关性。
  3. 建立索引:然后,为每个唯一的词汇创建一个条目,并列出所有包含该词汇的文档标识符及其位置信息。这个过程可能还会包括对词条进行排序、压缩等操作以优化存储和检索效率。
  4. 存储:最后,生成的倒排索引会被保存下来,使得后续可以通过查询直接访问。

查询倒排索引

  当用户执行搜索请求时,ElasticSearch 会解析查询语句,将其转换为相应的搜索条件,并利用以构建好的倒排索引来迅速定位相关文档。通过这种方式,即使是在海量数据中,也可以实现高效且准确的搜索结果并返回。

3.2 文档、索引与类型


  1. 文档Document
    1. 定义:文档是 Elasticsearch 中基本的存储单元,它是一个 JSON 格式的对象,包含了你要存储或搜索的数据。
    2. 特点
      1. 每个文档都有一个唯一的标识符(ID),可以由用户指定或者由 Elasticsearch 自动生成。
      2. 文档属于特定的索引和类型(在 ES 7.x及以后版本中,类型的概念已经被弱化)。
      3. 文档可以包含被嵌套对象和其他复杂的数据结构。
    3. 操作:可以通过创建、读取、更新和删除(CRUD)操作来管理文档。
  2. 索引Index
    1. 定义:索引是具有相似特性的文档集合,类似于传统数据库中的 “表” 或 “数据库”。每个索引都有自己的设置和映射(schema),用于定义其结构和行为。
    2. 特点
      1. 索引必须是小写字母。
      2. 可以配置分片(shards)和副本(replicas)的数量来控制性能和容错能力。
      3. 索引可以被关闭或打开,这会影响查询和写入操作。
    3. 操作:可以创建新的索引来保存数据,也可以删除不再需要的索引。
  3. 类型Type
    1. 定义:类型是在索引内部对文档进行分类的一种方式,在 ES 7.x之前的版本中广泛使用。类型允许你在同一个索引下存储不同种类但相关联的文档。
    2. 特点
      1. 在 Es 7.x 及之后的版本中,官方建议每个索引只包含一种类型的文档,即 <font style="color:#DF2A3F;">_doc</font>。这意味着类型的作用已经大大减弱。
      2. 尽管如此,你仍然可以在旧版本的索引中找到多个类型,但在新项目中应该避免这样做。
    3. 注意:从 Es 8.0 开始,类型已经被完全移除,所有文档都直接属于某个索引而没有类型区分。

文档、索引与类型之间的关系

  • 索引与文档:一个索引可以包含多个文档,每个文档都属于该索引。
  • 索引与类型(在 ES 7.x 之前):一个索引可以包含多种类型的文档,但是这个概念现在已经被简化。
  • 文档与类型(在 Es 7.x 之前):每个文档都关联到一个类型,但现在推荐每个索引仅使用默认的 _doc类型。

3.3 分片与副本


  1. 分片(Shards
    1. 定义:分片是一个 Lucene 索引,它是 Elasticsearch 内部的工作单元。一个 Elasticsearch 索引可以被分割成多个分片,每个分片都是一个独立的索引库,能够存储部分文档。
    2. 作用
      1. 水平扩展:通过将索引拆分为多个分片,可以将数据分布到不同的物理或虚拟服务器上,从而实现水平扩展,提高搜索和索引的速度。
      2. 容错性:如果某个节点失败,其他拥有相同分片副本的节点可以继续提供服务。
    3. 配置:当创建索引时,你可以指定该索引应该有多少个主分片(primary shards)。一旦确定了主分片的数量,这个数量就不能再改变,因此需要根据预期的数据量和集群规模来合理规范。
  2. 副本Replicas
    1. 定义:副本是指主分片的一个或多个拷贝。默认情况下,Elasticsearch 会为每个主分片创建一个副本。
    2. 作用
      1. 高可用性:副本提供了数据冗余,即使原主分片所在的节点发生故障,副本也可以接管请求,确保服务不中断。
      2. 读取负载均衡:副本还可以用来分担查询请求,减轻主分片的压力,特别是在读多写少的应用场景中。
      3. 灾难恢复:副本可以在原始数据丢失的情况下用于数据恢复。
    3. 配置:副本的数量是可以动态调整的。这意味着你可以在不影响现有数据的情况下增加或减少副本的数量,以适应不同的流量模式或硬件变化。
  3. 分片与副本的关系
    • 每个索引都有一定数量的主分片,这些主分片会被分配到集群中的不同节点上。
    • 对于每一个主分片,可以设置零个或多个副本。这些副本也会被分配到集群的不同节点上,但同一分片的主分片和其他所有副本不会位于同一个节点上,以避免单点故障。

四、安装与配置

4.1 下载与安装 ElasticSearch


  1. 进入官网下载压缩包
    官网地址:https://www.elastic.co/cn/downloads/elasticsearch

  2. 解压到自己的环境目录下

  3. 点击 根目录下的 binelasticsearch.bat 启动

    首次登陆会有密码,需要记一下

  4. 访问地址 http://127.0.0.1:9200/,输入用户名 elastic,密码为上面记的密码,即可进入,或者可以跳过密码验证进入,需要修改 config/elasticsearch.yml,将xpack.security.enabled: true 修改为xpack.security.enabled: false,重新启动即可。

问题:如果出现访问不了


打开 config/elasticsearch.yml,将xpack.security.http.ssl:enabled设置成false即可

4.2 常见配置项解析


  Elasticsearch(ES)的配置文件elasticsearch.yml中包含许多配置项,用于定义集群的行为、性能优化、安全性设置等。

# 1. 基本配置
# 指定 ES 集群的名称,默认值elasticsearch
cluster.name: my-cluster-name
# 为节点指定一个唯一的名称
node.name: node-1
# 指定存储索引数据的位置
path.data: /var/lib/elasticsearch
# 指定日志文件的存储位置
path.logs: /var/log/elasticsearch

# 2. 网络与发现配置
# 设置 es 监听的网络接口地址。
network.host: 0.0.0.0
# 指定 HTTP RESTful API 服务监听的端口号
http.port: 9200
# 列出用于集群发现的其他节点和主机名或IP地址列表
discovery.seed_hosts: ["host1", "host2"]
# 在集群启动时指定哪些节点应该作为初始主节点。
cluster.initial_master_nodes: ["node-1", "node-2"]

# 3. 性能调优
# 每个索引的主分片数量 默认值5
index.number_of_shards: 3
# 每个主分片的副本数量,默认值1
index.number_of_replicas: 2

# 4. 安全配置
# 是否启用内置的安全功能,如用户认证和授权
xpack.security.enabled: true
# 是否启用HTTPS协议进行加密通信
xpack.security.http.ssl.enabled: true

# 快照仓库路径
path.repo: ["/mnt/backups"]

# 其他配置,控制通过 from + size 参数可以检索的最大文档数
indices.query.bool.max_clause_count: 10000

把 es 添加到后台服务中:

  1. 以管理员身份运行 cmd
  2. 进入es的安装目录的/bin目录下
  3. 执行命令 .\elasticsearch-service.bat install -s "elasticsearch",elasticsearch为服务名,然后在服务中找到它,右键启动即可
  4. 效果
    在这里插入图片描述

五、数据索引与搜索

5.1 创建索引与插入文档


  在 Elasticsearch 中, 索引Index)是存储相关文档的逻辑容器。每个索引都有一个映射(Mapping),它定义了索引中的文档结构和字段类型。

  1. 创建索引
    要创建一个新的索引,你可以使用 PUT HTTP 请求,并指定索引名称。你还可以在同一请求中定义映射和其他设置。

    # 创建一个名为my-index-000001的索引,设置了一个主分片和一个副本分片,并为索引指定了三个字段:title、content和timestamp
    PUT /my-index-000001
    {
      "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 1
      },
      "mappings": {
        "properties": {
          "title": { "type": "text" },
          "content": { "type": "text" },
          "timestamp": { "type": "date" }
        }
      }
    }
    
  2. 创建文档
    向索引中添加文档时,可以使用POSTPUT方法。POST用于自动分配ID,而PUT允许你指定自己的ID

    POST /my-index-000001/_doc/
    {
      "title": "Elasticsearch简介",
      "content": "Elasticsearch是一个分布式搜索引擎...",
      "timestamp": "2024-12-30T16:46:00"
    }
    
    
    PUT /my-index-000001/_doc/1
    {
      "title": "Elasticsearch进阶",
      "content": "深入理解Elasticsearch的工作原理...",
      "timestamp": "2024-12-30T17:00:00"
    }
    

5.2 执行基本搜索操作


  Elasticsearch 提供了强大的搜索功能,支持全文搜索、过滤、聚合等复杂查询。最简单的搜索方式是通过 GET 请求发送到特定索引的 _search 端点。

  1. 简单匹配查询

    # 在 my-index-000001 索引中查找所有标题包含 “Elasticsearch” 的文档。
    GET /my-index-000001/_search
    {
      "query": {
        "match": {
          "title": "Elasticsearch"
        }
      }
    }
    
  2. 多字段查询
    如何你想要同时在多个字段上进行搜索,可以使用 multi_match 查询:

    GET /my-index-000001/_search
    {
        "query": {
            "multi_match":{
                "query": "Elasticsearch",
                "fields": ["title", "content"]
            }
        }
    }
    
  3. 过滤查询
    对于精确匹配或者需要高效性能的情况,可以使用 termterms 查询来过滤结果:

    GET /my-index-000001/_search
    {
        "query": {
            "term": {
              "title": "es简介"
            }
        }
    }
    

5.3 Query DSL 查询语法解析


  Elasticsearch 使用一种成为Query DSL(Domain Specific Language) 的强大查询语言,它允许用户构建复杂的查询表达式。Query DSL 由不同的查询类型组成,每种类型适用于特定场景。

  1. match 和 match_phrase

    • match:用于全文搜索,会分析输入文本并尝试找到最佳匹配。

      {
        "query": {
          "match": {
            "content": "Elasticsearch入门"
          }
        }
      }
      
    • match_phrase:类似于 match,但要求整个短语必须完全匹配。

      {
        "query": {
          "match_phrase": {
            "content": "Elasticsearch入门"
          }
        }
      }
      
  2. bool 查询
    bool 查询组合了多个子查询,支持 mustshouldmust_notfilter条件。

    • must:所有子查询必须匹配
    • should:至少有一个子查询匹配
    • must_not:子查询不能匹配
    • filter:用于过滤文档,不计算评分(提高性能)
    {
      "query": {
        "bool": {
          "must": [
            { "match": { "title": "Elasticsearch" } }
          ],
          "filter": [
            { "term": { "status": "published" } }
          ]
        }
      }
    }
    
  3. range 查询
    range查询用于查找落在给定范围内的数值或日期字段

    {
      "query": {
        "range": {
          "timestamp": {
            "gte": "2024-12-01T00:00:00",
            "lte": "2024-12-31T23:59:59"
          }
        }
      }
    }
    
  4. nested 查询
    当你的文档中有嵌套对象时,可以使用 nested 查询来访问这些对象内部的数据。

    {
      "query": {
        "nested": {
          "path": "comments",
          "query": {
            "bool": {
              "must": [
                { "match": { "comments.content": "great post" } }
              ]
            }
          }
        }
      }
    }
    
  5. 聚合查询
    除了标准的搜索查询外,Elasticsearch 还支持聚合(Aggregations),它可有对搜索结果进行统计分析,如计数、求平均值、分组等。

    {
      "query": {
        "nested": {
          "path": "comments",
          "query": {
            "bool": {
              "must": [
                { "match": { "comments.content": "great post" } }
              ]
            }
          }
        }
      }
    }
    

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

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

相关文章

【Vue学习】Vue 组件实例的生命周期(四个阶段,八个钩子)

一、为什么要理解生命周期&#xff1f; 理解生命周期就像是知道了一部电影的剧情走向&#xff0c;能让你在适当的时机做出反应。Vue 生命周期的钩子让你可以在不同的阶段插入你的逻辑&#xff0c;像是提前准备、后期清理或者在数据更新时做点事情。这种“精确控制”的能力会让你…

【Vim Masterclass 笔记08】第 6 章:Vim 中的文本变换及替换操作 + S06L20:文本的插入、变更、替换,以及合并操作

文章目录 Section 6&#xff1a;Transforming and Substituting TextS06L21 Inserting, Changing, Replacing, and Joining1 定位到行首非空字符&#xff0c;并启用插入模式2 在紧挨光标的下一个字符位置启动插入模式3 定位到一行末尾&#xff0c;并启用插入模式4 定位到光标的…

vip与haproxy构建nginx高可用集群传递客户端真实ip

问题 系统使用了vip与haproxy实现高可用以及对nginx进行负载均衡&#xff0c;但是发现在上游的应用服务无法拿到客户端的请求ip地址&#xff0c;拿到的是主haproxy机器的ip&#xff0c;以下是nginx与haproxy的缩减配置&#xff1a; location ~* ^/(xx|xx) {proxy_pass http:/…

YOLOv5部署到web端(flask+js简单易懂)

文章目录 前言最终实现效果图后端实现 主界面检测函数检测结果显示 前端实现 主界面(index.html&#xff09;显示图片界面 总结 前言 最近&#xff0c;老板让写一个程序把yolov5检测模型部署到web端&#xff0c;在网页直接进行目标检测。经过1个星期的努力&#xff0c;终于实…

【Vue】分享一个快速入门的前端框架以及如何搭建

先上效果图: 登录 菜单: 下载地址: 链接&#xff1a;https://pan.baidu.com/s/1m-ZlBARWU6_2n8jZil_RAQ 提取码&#xff1a;ui20 … 主要是可以自定义设置token,更改后端请求地址较为方便。 应用设置: 登录与token设置: 在这里设置不用登录,可以请求的接口: request.js i…

【Linux】RPMSG通讯协议介绍

RPMSG协议通讯协议介绍 RPMSG&#xff0c;全称Remote processor Messaging。是一种核间通讯协议。在Linux Kernel中&#xff0c;已经内置了RPMSG。 Linux RPMSG基于共享内存&#xff0c;利用RPMSG可以高效的实现核间通信。比如Linux与FreeRTOS、Linux与Android&#xff0c;都可…

【51单片机-零基础chapter1】

安装软件(配套的有,不多赘述) 1.管理员身份运行keil和破解软件kegen 将CID代码复制粘贴到 一定要管理员方式,不然会error 插入板子 我的电脑,管理 1.如果是拯救者,查看端口,如果没有则显示隐藏 2.苹果不知道,好像不可以 3.其他电脑在"其他设备找" (注:本人在校已…

计算机网络-数据链路层(CSMA/CD协议,CSMA/CA协议)

2.2 ppp协议 点对点协议ppp是目前使用最广泛的点对点数据链路层协议。 2.3 媒体接入控制基本概念 共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用&#xff0c;即媒体接入控制MAC。 2.3.1 静态划分信道 频分复用 时分复用 波分复用 码分复…

JMeter + Grafana +InfluxDB性能监控 (二)

您可以通过JMeter、Grafana 和 InfluxDB来搭建一个炫酷的基于JMeter测试数据的性能测试监控平台。 下面&#xff0c;笔者详细介绍具体的搭建过程。 安装并配置InfluxDB 您可以从清华大学开源软件镜像站等获得InfluxDB的RPM包&#xff0c;这里笔者下载的是influxdb-1.8.0.x86_…

李宏毅机器学习笔记-Transformer

目录 1. Seq2seq 2. encoder Transformer 中的 Block 结构 3. Decoder 4.Encoder和Decoder间的信息传递 5.Training 6.Tips 1. Seq2seq Transformer 是一个seq2seq的model。Seq2seq指的是input是一个序列&#xff0c;输出也是一个序列&#xff0c;输出的长度是由机器自己…

【AWS SDK PHP】This operation requests `sigv4a` auth schemes 问题处理

使用AWS SDK碰到的错误&#xff0c;其实很简单&#xff0c;要装个扩展库 保持如下 Fatal error: Uncaught Aws\Auth\Exception\UnresolvedAuthSchemeException: This operation requests sigv4a auth schemes, but the client currently supports sigv4, none, bearer, sigv4-…

Qt 5.14.2 学习记录 —— 일 新项目

文章目录 1、创建2、查看代码 ---- main.cpp3、查看代码 ---- widgt.h4、查看代码 ---- widgt.cpp和widget.ui5、查看代码 ---- Empty.pro6、运行产生的中间文件 1、创建 左上角的文件&#xff0c;新建文件或项目。如果要写一个GUI程序&#xff0c;应当选择Application&#x…

Spring MVC和servlet

1.Spring MVC是Spring框架的一个扩展 2.Spring MVC工作流程 1、用户发送请求至前端控制器DispatcherServlet。 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找)&#xff0c;生成处理器对象及…

蓝牙架构介绍

架构1&#xff1a;hostcontroller双芯片标准架构 这个标准把蓝牙协议栈分成host和controller两部分&#xff0c;其中host跑在AP上&#xff0c;controller跑在蓝牙模块上&#xff0c;两者之间通过HCI协议进行通信&#xff0c;AP芯片厂商一般会直接采用开源的Bluez来实现Host功能…

MySQL(二)MySQL DDL数据库定义语言

1. MySQL DDL数据库定义语言 1.1. MySQL定义语言 进入MySQL mysql -u root -p(回车后输入密码&#xff0c;即可进入mysq1)1.1.1. 数据库操作 &#xff08;1&#xff09;查看数据库 mysql>show databases;注:MySQL语句分隔符为“&#xff1b;”   mysql库很重要它里面有…

决定系数(R²分数)——评估回归模型性能的一个指标

目录 1.定义 2.计算举例 3. 结果分析 1.定义 R&#xff08;R平方&#xff09;分数&#xff0c;也称为决定系数&#xff0c;是用来评估回归模型性能的一个指标。它表示自变量解释因变量变异性的比例。R分数的取值范围通常在0到1之间&#xff0c;其值越接近1&#xff0c;说明…

node.js内置模块之---stream 模块

stream 模块的作用 在 Node.js 中&#xff0c;stream 模块是一个用于处理流&#xff08;stream&#xff09;的核心模块。流是一种处理数据的抽象方式&#xff0c;允许程序处理大量数据时不会一次性将所有数据加载到内存中&#xff0c;从而提高性能和内存效率。通过流&#xff0…

音视频入门基础:MPEG2-PS专题(5)——FFmpeg源码中,解析PS流中的PES流的实现

一、引言 从《音视频入门基础&#xff1a;MPEG2-PS专题&#xff08;3&#xff09;——MPEG2-PS格式简介》中可以知道&#xff0c;PS流由一个个pack&#xff08;包装&#xff09;组成。一个pack 一个pack_header 一个或多个PES_packet。pack_header中还可能存在system header…

ElasticSearch05-集群搭建

零、文章目录 ElasticSearch05-集群搭建 1、Windows集群 &#xff08;1&#xff09;安装节点 就是把下载的压缩包解压之后复制三个副本 &#xff08;2&#xff09;配置节点 每个文件夹的配置文件config/elasticsearch.yml修改如下node-01 配置如下 cluster.name: myclust…

【服务器项目部署】✈️将本地项目部署到服务器(二)!

目录 &#x1f44b;前言 &#x1f440;一、功能调整 &#x1f331;二、服务部署 &#x1f49e;️三、代码调整 &#x1f37b;四、章末 &#x1f44b;前言 小伙伴们大家好&#xff0c;上篇文章本地实践了如何将本地项目部署到服务器上&#xff0c;从服务器的选择、服务器环境…