跳到主要内容

Elasticsearch 文档操作

Elasticsearch 是一个分布式搜索引擎,广泛用于全文搜索、日志分析和实时数据分析。在 Elasticsearch 中,文档(Document)是最基本的数据单元,类似于关系型数据库中的一行记录。本文将详细介绍如何在 Elasticsearch 中进行文档的创建、读取、更新和删除操作。

1. 文档的基本概念

在 Elasticsearch 中,文档是以 JSON 格式存储的数据。每个文档都有一个唯一的 ID,并且属于某个索引(Index)和类型(Type)。虽然 Elasticsearch 7.x 及更高版本中已经移除了类型的概念,但为了兼容性,我们仍然可以在某些上下文中看到它的使用。

备注

Elasticsearch 7.x 及更高版本中,类型(Type)已被弃用,建议将所有文档存储在同一个类型下。

2. 创建文档

在 Elasticsearch 中,创建文档可以通过 PUTPOST 请求来实现。PUT 请求需要指定文档的 ID,而 POST 请求则由 Elasticsearch 自动生成 ID。

使用 PUT 创建文档

json
PUT /my_index/_doc/1
{
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
}

响应:

json
{
"_index": "my_index",
"_type": "_doc",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}

使用 POST 创建文档

json
POST /my_index/_doc/
{
"name": "Jane Doe",
"age": 25,
"email": "jane.doe@example.com"
}

响应:

json
{
"_index": "my_index",
"_type": "_doc",
"_id": "2", // 自动生成的 ID
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
提示

如果你不确定文档的 ID,可以使用 POST 请求,Elasticsearch 会自动生成一个唯一的 ID。

3. 读取文档

读取文档是通过 GET 请求来实现的。你需要指定文档的索引和 ID。

json
GET /my_index/_doc/1

响应:

json
{
"_index": "my_index",
"_type": "_doc",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": {
"name": "John Doe",
"age": 30,
"email": "john.doe@example.com"
}
}
警告

如果文档不存在,Elasticsearch 会返回 found: false

4. 更新文档

更新文档可以通过 POSTPUT 请求来实现。POST 请求通常用于部分更新,而 PUT 请求用于完全替换文档。

使用 POST 进行部分更新

json
POST /my_index/_update/1
{
"doc": {
"age": 31
}
}

响应:

json
{
"_index": "my_index",
"_type": "_doc",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 2,
"_primary_term": 1
}

使用 PUT 进行完全替换

json
PUT /my_index/_doc/1
{
"name": "John Doe",
"age": 31,
"email": "john.doe@example.com"
}

响应:

json
{
"_index": "my_index",
"_type": "_doc",
"_id": "1",
"_version": 3,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 3,
"_primary_term": 1
}
注意

使用 PUT 请求进行更新时,如果文档不存在,Elasticsearch 会创建一个新文档。

5. 删除文档

删除文档是通过 DELETE 请求来实现的。你需要指定文档的索引和 ID。

json
DELETE /my_index/_doc/1

响应:

json
{
"_index": "my_index",
"_type": "_doc",
"_id": "1",
"_version": 4,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 4,
"_primary_term": 1
}
警告

删除操作是不可逆的,请谨慎操作。

6. 实际应用场景

假设你正在开发一个博客系统,用户可以在系统中发布文章。你可以使用 Elasticsearch 来存储和检索这些文章。以下是一个简单的应用场景:

  1. 创建文章:当用户发布一篇新文章时,使用 POST 请求将文章存储到 Elasticsearch 中。
  2. 读取文章:当用户访问某篇文章时,使用 GET 请求从 Elasticsearch 中检索文章内容。
  3. 更新文章:当用户编辑文章时,使用 POST 请求进行部分更新。
  4. 删除文章:当用户删除文章时,使用 DELETE 请求从 Elasticsearch 中删除文章。

7. 总结

本文介绍了 Elasticsearch 中的文档操作,包括创建、读取、更新和删除文档。这些操作是 Elasticsearch 中最基本的功能,掌握它们对于进一步学习和使用 Elasticsearch 至关重要。

8. 附加资源与练习

  • 练习:尝试在你的本地 Elasticsearch 实例中创建一个索引,并进行文档的增删改查操作。
  • 资源:阅读 Elasticsearch 官方文档,了解更多高级功能和最佳实践。
提示

如果你在练习中遇到问题,可以参考 Elasticsearch 的官方文档或社区论坛。