ElasticSearch 实战: ES 文档 API

Elasticsearch 提供了一系列文档(Document)API,用于对索引中的个体数据单元进行增删改查操作。以下是对主要文档API的实战介绍:

1. 索引文档 (Index API)

目的:插入或更新文档。

请求方式:PUT 或 POST

URLPUT /<index>/_doc/<_id>POST /<index>/_doc/<_id>

请求体:包含待索引的文档数据,以JSON格式表示。

示例

PUT /my_index/_doc/1
{
  "title": "Example Document",
  "body": "This is an example document.",
  "author": "John Doe",
  "publication_date": "2024-04-0½"
}

注意

  • 使用 PUT 方法时,如果文档ID已存在,会更新该文档;不存在则插入新文档。
  • 使用 POST 方法时,Elasticsearch会自动生成文档ID(如果未指定),并始终插入新文档。在6.x版本之后,推荐使用 PUT 方式,因为 POST 可能会在未来版本中移除。

2. 获取文档 (Get API)

目的:检索指定ID的文档。

请求方式:GET

URLGET /<index>/_doc/<_id>

示例

GET /my_index/_doc/1

3. 更新文档 (Update API)

目的:部分更新文档内容,无需提供完整的文档。

请求方式:POST

URLPOST /<index>/_update/<_id>

请求体:包含更新指令,如 scriptdoc(用于替换整个文档)。

示例(使用脚本更新body字段):

POST /my_index/_update/1
{
  "script": {
    "source": "ctx._source.body += ' Updated content';"
  }
}

4. 删除文档 (Delete API)

目的:从索引中移除指定ID的文档。

请求方式:DELETE

URLDELETE /<index>/_doc/<_id>

示例

DELETE /my_index/_doc/1

5. 批量操作 (Bulk API)

目的:一次性执行多个索引、更新、删除操作,提高数据处理效率。

请求方式:POST

URLPOST /_bulk

请求体:包含一系列操作行,每行由操作元数据(如{ "index": { "_index": "my_index", "_id": "1" } })和可选的文档数据(换行分隔)组成。

示例

POST /_bulk
{ "index": { "_index": "my_index", "_id": "1" } }
{ "title": "Example Document", "body": "Original content" }
{ "update": { "_index": "my_index", "_id": "1" } }
{ "doc": { "body": "Updated content" } }
{ "delete": { "_index": "my_index", "_id": "2" } }

6. 版本控制与乐观并发控制

在进行文档操作时,可以利用Elasticsearch的版本控制机制来实现乐观并发控制。在请求中添加 versionif_seq_noif_primary_term 参数,确保在特定版本或序列号条件下执行操作,避免并发冲突。

7. 刷新与等待索引

  • 刷新 (Refresh):通过在请求中添加 ?refresh=true 参数,确保操作立即可见于搜索。但频繁刷新会影响写入性能。

  • 等待索引 (Wait For Active Shards):使用 wait_for_active_shards 参数指定在多少个主分片上完成操作后才返回成功响应,以保证数据持久化和复制的可靠性。

8. 源字段 (Source Filtering)

在获取文档或搜索结果时,可以使用 _source 参数来筛选返回的文档源字段,只获取需要的部分,节省带宽和处理资源。

9. 文档元数据

每个文档除了用户提供的数据外,还包含一些系统生成的元数据,如 _index_type(在7.x+版本中已弃用)、_id_version_score(搜索结果中)等。这些信息在处理文档时可能会用到。

在Elasticsearch实战中,熟练运用这些文档API可以有效地管理和操作索引中的数据。结合实际情况,合理选择API、参数以及请求体内容,以满足具体业务需求并优化系统性能。同时,关注Elasticsearch版本更新带来的API变更,确保代码与最新规范保持一致。

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值