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

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();
  1. 作用:创建一个连接到本地 Elasticsearch 服务器的客户端。
  2. 为什么这么写:Elasticsearch 默认运行在 localhost:9200,所以直接连接。
  3. 知识点:使用 ClientBuilder 类建立连接。
第 2 行:创建索引
$client->indices()->create($params);
  1. 作用:调用 indices() 方法访问索引管理功能,再调用 create() 创建索引。
  2. 为什么这么写:Elasticsearch 的 API 需要按层级调用。
  3. 知识点:Elasticsearch 的 REST API 层级结构。
第 3 行:插入文档
$client->index($params);
  1. 作用:将文档(一本书)插入到指定索引中。
  2. 为什么这么写index() 方法是 Elasticsearch 插入文档的标准 API。
  3. 知识点:Elasticsearch 的文档操作 API。
第 4 行:查询文档
$client->search($params);
  1. 作用:执行搜索查询,返回符合条件的文档。
  2. 为什么这么写search() 是核心查询方法。
  3. 知识点:Elasticsearch 的查询 DSL(领域特定语言)。
第 5 行:删除索引
$client->indices()->delete(['index' => 'book_index']);
  1. 作用:删除指定的索引(相当于关闭整个图书馆)。
  2. 为什么这么写:通过 indices() 进入索引管理,再调用 delete()
  3. 知识点:索引管理 API 的使用。

9. 总结

  • Elasticsearch API 就像“图书馆管理员”,帮你管理数据。
  • 核心功能:创建/删除索引、插入/查询文档。
  • 底层原理:基于分片和倒排索引,分布式存储和快速查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值