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);
第 4 步:插入文档
$client->index($params);
第 5 步:查询文档
$client->search($params);
第 6 步:删除索引
$client->indices()->delete(['index' => 'book_index']);
7. 总结
- Elasticsearch 服务器 就像一个超级大的“数据城堡”,由节点、索引、分片组成。
- 核心功能:分布式存储、快速查询、高可用性(通过副本)。
- 底层原理:通过分片和倒排索引实现高效查询,通过集群实现扩展和容错。
评论前必须登录!
注册