云计算百科
云计算领域专业知识百科平台

Elasticsearch 服务器一共包含哪些部分?一共包含哪些部分?使用场景是什么?底层原理是什么?

1. Elasticsearch 服务器包含哪些部分?

(1) 核心组成部分
  • 节点(Node) 像城堡里的“管理员”,负责存储数据和处理请求。

    • 主节点(Master Node):像“城堡国王”,负责管理所有节点和集群状态。
    • 数据节点(Data Node):像“图书管理员”,负责存储数据和处理查询。
    • 协调节点(Coordinating Node):像“接待员”,接收用户的请求并分发给其他节点。
  • 集群(Cluster) 一群节点组成的“团队”,共同管理数据。就像一群管理员一起管理整个图书馆。

  • 索引(Index) 像图书馆里的“书架”,存储同类型的文档(比如“童话书”或“科技书”)。

  • 分片(Shard) 像书架分成多个“小抽屉”,把大数据分成小块,方便分布式存储和查询。

  • 倒排索引(Inverted Index) 像一本“快速找书的目录”,记录每个单词出现在哪些文档里。


  • (2) 使用场景
    • 电商搜索:在海量商品中快速找到用户想要的商品。
    • 日志分析:分析服务器日志,快速定位错误。
    • 实时推荐:根据用户行为推荐内容(比如短视频平台)。
    • 地理位置查询:查找附近的餐厅或商店。

    (3) 底层原理

    Elasticsearch 的核心是 分布式系统,像一群小伙伴一起合作管理一个超级大的图书馆:

    • 分片:把数据分成小块,存储在不同节点上,提高查询速度。
    • 复制:每个分片都有备份(副本),防止数据丢失。
    • 倒排索引:快速找到关键词对应的文档,就像用目录找书一样。

    2. 流程图

    以下是 Elasticsearch 服务器的工作流程:

    +——————-+
    | 用户发送请求 |
    +——————-+
    |
    v
    +——————-+
    | 协调节点 | (接待员)
    | 接收请求并分发 |
    +——————-+
    |
    v
    +——————-+
    | 数据节点 | (图书管理员)
    | 处理查询或存储数据|
    +——————-+
    |
    v
    +——————-+
    | 主节点 | (国王)
    | 管理集群状态 |
    +——————-+
    |
    v
    +——————-+
    | 返回结果给用户 |
    +——————-+


    3. 概念图

    以下是 Elasticsearch 服务器的核心概念:

    +——————-+
    | Elasticsearch |
    | 服务器 |
    +——————-+
    |
    v
    +——————-+
    | 集群(Cluster) | (一群管理员)
    +——————-+
    |
    v
    +——————-+
    | 节点(Node) | (管理员角色)
    | – 主节点 |
    | – 数据节点 |
    | – 协调节点 |
    +——————-+
    |
    v
    +——————-+
    | 索引(Index) | (书架)
    +——————-+
    |
    v
    +——————-+
    | 分片(Shard) | (小抽屉)
    +——————-+
    |
    v
    +——————-+
    | 倒排索引 | (快速找书目录)
    +——————-+


    4. UML 类图

    以下是简化后的 UML 类图:

    +——————-+
    | Cluster |
    +——————-+
    | – nodes: List | (所有节点)
    | – name: string | (集群名称)
    +——————-+
    | + manageNodes(): void |
    +——————-+

    +——————-+
    | Node |
    +——————-+
    | – role: string | (主节点、数据节点等)
    | – data: Map | (存储的文档)
    +——————-+
    | + processRequest(): void |
    +——————-+

    +——————-+
    | Index |
    +——————-+
    | – shards: List | (分片列表)
    | – mappings: Map | (字段类型定义)
    +——————-+
    | + addDocument(): void |
    +——————-+

    +——————-+
    | Shard |
    +——————-+
    | – documents: List | (存储的文档)
    | – invertedIndex: Map |
    +——————-+
    | + search(): List |
    +——————-+


    5. 思维导图

    以下是 Elasticsearch 服务器的思维导图:

    +——————-+
    | Elasticsearch |
    | 服务器 |
    +——————-+
    | + 核心概念 |
    | + 集群 |
    | + 节点 |
    | + 索引 |
    | + 分片 |
    | + 数据存储 |
    | + 倒排索引 |
    | + 分布式存储 |
    | + 查询流程 |
    | + 分发请求 |
    | + 并行处理 |
    +——————-+


    6. 实例代码(PHP 连接并操作 Elasticsearch 服务器)

    以下是 PHP 代码示例,连接到 Elasticsearch 服务器并执行基本操作:

    <?php

    // 1. 安装 Elasticsearch 客户端库(需要先执行:composer require elasticsearch)
    require 'vendor/autoload.php';

    // 2. 创建客户端连接到服务器
    use Elasticsearch\\ClientBuilder;

    // 创建客户端,连接到本地服务器
    $client = ClientBuilder::create()
    ->setHosts(['http://localhost:9200']) // 连接地址
    ->build();

    // 3. 创建索引(书架)
    $params = [
    'index' => 'book_index', // 索引名称
    'body' => [
    'settings' => [
    'number_of_shards' => 2, // 分片数量
    'number_of_replicas' => 1 // 副本数量
    ],
    'mappings' => [ // 字段定义
    'properties' => [
    'title' => ['type' => 'text'], // 文本类型
    'author' => ['type' => 'keyword'], // 关键字类型
    'year' => ['type' => 'integer'] // 整数类型
    ]
    ]
    ]
    ];
    $client->indices()->create($params); // 创建索引

    // 4. 插入文档(放一本书到书架)
    $params = [
    'index' => 'book_index',
    'id' => '1',
    'body' => [
    'title' => '小王子',
    'author' => '圣埃克苏佩里',
    'year' => 1943
    ]
    ];
    $client->index($params); // 插入文档

    // 5. 查询文档(找书)
    $params = [
    'index' => 'book_index',
    'body' => [
    'query' => [
    'match' => [ // 匹配查询
    'author' => '圣埃克苏佩里'
    ]
    ]
    ]
    ];
    $searchResponse = $client->search($params); // 执行查询
    print_r($searchResponse); // 输出结果

    // 6. 删除索引(拆除书架)
    $client->indices()->delete(['index' => 'book_index']);


    代码注释详细解释

    第 3 步:创建索引

    $client->indices()->create($params);

  • 作用:创建一个名为 book_index 的索引,并设置分片和副本数量。
  • 为什么这么写:Elasticsearch 需要预先定义索引的结构(分片、副本、字段类型)。
  • 知识点:Elasticsearch 的 索引创建 API 和分片配置。
  • 第 4 步:插入文档

    $client->index($params);

  • 作用:将文档插入到 book_index 索引中。
  • 为什么这么写:index() 方法对应 Elasticsearch 的 索引 API,用于存储数据。
  • 知识点:Elasticsearch 的 文档存储 和 HTTP 请求方法(PUT)。
  • 第 5 步:查询文档

    $client->search($params);

  • 作用:根据作者名称查询文档。
  • 为什么这么写:search() 方法是 Elasticsearch 的核心查询接口。
  • 知识点:Elasticsearch 的 查询 DSL(领域特定语言)。
  • 第 6 步:删除索引

    $client->indices()->delete(['index' => 'book_index']);

  • 作用:删除整个索引及其数据。
  • 为什么这么写:通过 indices() 进入索引管理模块,调用 delete() 方法。
  • 知识点:Elasticsearch 的 索引管理 API。

  • 7. 总结

    • Elasticsearch 服务器 就像一个超级大的“数据城堡”,由节点、索引、分片组成。
    • 核心功能:分布式存储、快速查询、高可用性(通过副本)。
    • 底层原理:通过分片和倒排索引实现高效查询,通过集群实现扩展和容错。
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Elasticsearch 服务器一共包含哪些部分?一共包含哪些部分?使用场景是什么?底层原理是什么?
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!