1. Elasticsearch 的 API 一共包含哪些部分?
Elasticsearch 是一个强大的搜索引擎,它提供了很多 API(可以理解为“命令”),帮助我们操作数据。主要分为以下几类:
(1) 数据操作 API
- 创建索引(Create Index):像“创建一个图书馆”。
- 插入文档(Index Document):像“把一本书放进图书馆的架子上”。
- 查询文档(Search):像“在图书馆里找一本书”。
- 更新文档(Update):像“修改一本书的内容”。
- 删除文档(Delete):像“从图书馆里拿走一本书”。
(2) 索引管理 API
- 删除索引(Delete Index):像“关掉一个图书馆”。
- 获取索引信息(Get Index):像“查看图书馆的详细信息”。
- 分片管理(Shard):像“把图书馆分成多个小房间,方便管理”。
(3) 高级 API
- 聚合(Aggregations):像“统计图书馆里有多少本故事书”。
- 批量操作(Bulk):像“一次放很多本书进图书馆”。
2. 使用场景是什么?
Elasticsearch 常用于以下场景:
- 电商搜索:快速找到商品。
- 日志分析:分析服务器日志中的错误。
- 实时推荐:根据用户喜好推荐内容。
- 地理位置查询:查找附近的餐厅。
3. 底层原理是什么?
Elasticsearch 的底层原理和 Lucene 有关(就像你之前学过的!)。它把数据分成多个 分片(Shard),每个分片都是一个独立的 Lucene 索引。这样可以:
- 分布式存储:数据分散在多个服务器上。
- 快速查询:每个分片独立工作,同时处理请求。
4. 流程图
以下是 Elasticsearch 的基本操作流程图:
+-------------------+
| 用户发送请求 |
+-------------------+
|
v
+-------------------+
| Elasticsearch |
| 解析请求 |
+-------------------+
|
v
+-------------------+
| 执行对应 API |
| (如查询、插入等)|
+-------------------+
|
v
+-------------------+
| 返回结果给用户 |
+-------------------+
5. 概念图
以下是 Elasticsearch 的核心概念:
+-------------------+
| Elasticsearch |
+-------------------+
|
v
+-------------------+
| 索引(Index) | (图书馆)
+-------------------+
|
v
+-------------------+
| 文档(Document) | (书)
+-------------------+
|
v
+-------------------+
| 分片(Shard) | (图书馆的房间)
+-------------------+
|
v
+-------------------+
| 倒排索引 | (快速找书的目录)
+-------------------+
6. UML 类图
以下是简化后的 UML 类图:
+-------------------+
| Elasticsearch |
+-------------------+
| - indices: List |
| - shards: List |
+-------------------+
| + createIndex(): void |
| + deleteIndex(): void |
| + search(): List |
+-------------------+
+-------------------+
| Index |
+-------------------+
| - documents: List |
| - shards: List |
+-------------------+
| + addDocument(): void |
| + deleteDocument(): void |
+-------------------+
7. 思维导图
以下是 Elasticsearch 的思维导图:
+-------------------+
| Elasticsearch |
+-------------------+
| + 索引操作 |
| + 创建索引 |
| + 删除索引 |
| + 文档操作 |
| + 插入文档 |
| + 查询文档 |
| + 删除文档 |
| + 高级功能 |
| + 聚合统计 |
| + 分布式搜索 |
+-------------------+
8. 实例代码(PHP + Elasticsearch API)
这里用 PHP 调用 Elasticsearch 的 REST API,创建一个简单的图书索引:
<?php
// 引入 Elasticsearch 客户端库(需要先安装:composer require elasticsearch)
require 'vendor/autoload.php';
use Elasticsearch\ClientBuilder;
// 创建 Elasticsearch 客户端(连接到本地服务器)
$client = ClientBuilder::create()
->setHosts(['http://localhost:9200']) // 1. 连接地址是 Elasticsearch 的默认端口。
->build(); // 2. build() 方法初始化客户端对象。
// 1. 创建索引(图书馆)
$params = [
'index' => 'book_index', // 索引名称
'body' => [
'settings' => [
'number_of_shards' => 1, // 分片数量
'number_of_replicas' => 0 // 副本数量
]
]
];
$response = $client->indices()->create($params); // 3. 调用 create() 方法创建索引。
// 2. 插入文档(放入一本书)
$params = [
'index' => 'book_index',
'id' => '1', // 文档 ID
'body' => [
'title' => '小王子',
'author' => '圣埃克苏佩里',
'year' => 1943
]
];
$client->index($params); // 4. index() 方法插入文档。
// 3. 查询文档(找书)
$params = [
'index' => 'book_index',
'body' => [
'query' => [
'match' => [ // 匹配查询
'author' => '圣埃克苏佩里'
]
]
]
];
$response = $client->search($params); // 5. search() 方法执行查询。
print_r($response); // 输出结果。
// 4. 删除索引(关掉图书馆)
$client->indices()->delete(['index' => 'book_index']); // 6. delete() 方法删除索引。
代码注释详细解释
第 1 行:连接 Elasticsearch
$client = ClientBuilder::create()
->setHosts(['http://localhost:9200'])
->build();
- 作用:创建一个连接到本地 Elasticsearch 服务器的客户端。
- 为什么这么写:Elasticsearch 默认运行在
localhost:9200
,所以直接连接。 - 知识点:使用 ClientBuilder 类建立连接。
第 2 行:创建索引
$client->indices()->create($params);
- 作用:调用
indices()
方法访问索引管理功能,再调用create()
创建索引。 - 为什么这么写:Elasticsearch 的 API 需要按层级调用。
- 知识点:Elasticsearch 的 REST API 层级结构。
第 3 行:插入文档
$client->index($params);
- 作用:将文档(一本书)插入到指定索引中。
- 为什么这么写:
index()
方法是 Elasticsearch 插入文档的标准 API。 - 知识点:Elasticsearch 的文档操作 API。
第 4 行:查询文档
$client->search($params);
- 作用:执行搜索查询,返回符合条件的文档。
- 为什么这么写:
search()
是核心查询方法。 - 知识点:Elasticsearch 的查询 DSL(领域特定语言)。
第 5 行:删除索引
$client->indices()->delete(['index' => 'book_index']);
- 作用:删除指定的索引(相当于关闭整个图书馆)。
- 为什么这么写:通过
indices()
进入索引管理,再调用delete()
。 - 知识点:索引管理 API 的使用。
9. 总结
- Elasticsearch API 就像“图书馆管理员”,帮你管理数据。
- 核心功能:创建/删除索引、插入/查询文档。
- 底层原理:基于分片和倒排索引,分布式存储和快速查询。