elasticSearch修改数据

本文介绍Elasticsearch如何实现数据的实时操作与搜索,包括索引、更新、删除文档及批量处理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Elasticsearch几乎能实时提供数据操作和搜索功能。默认情况下,从开始索引/更新/删除数据到出现搜索结果的时间可以认为需要一秒的时间。这是与SQL等其他平台的重要区别,其中数据在事务完成后可以立即使用。

在上节中我们给索引创建了一个文档,命令为

PUT /customer/_doc/1?pretty
{
  "name": "John Doe"
}

如果不存在id为1的文档,索引中将新建一个文档id为1,如果索引中在之前已经存在id为1的文档,新文档将覆盖历史文档。如果我们存入的文档id和已存在的文档id都不相同将不会影响。索引文档时,ID部分是可选的。如果未指定,Elasticsearch将生成一个随机ID,然后用它来索引文档。示例如下,注意这里使用关键词post而不是put因为我们没有指定ID。


1.更新文档内容。

我们不仅能索引和替换文档,还可以更新文档内容,但请注意,Elasticsearch实际上并没有在原文档进行就地更新。无论何时我们进行更新,Elasticsearch都会删除旧文档,索引一个新文档来立刻替换它。示例如下

1.通过替换名字来更新文档。

POST /customer/_doc/1/_update?pretty
{
  "doc": { "name": "Janeee Doe" }

}

2.将名称字段更改为“Jane Doe”并同时向其添加年龄字段来更新我们以前的文档(ID为1)

POST /customer/_doc/1/_update?pretty
{
  "doc": { "name": "Jane Doe", "age": 20 }
}


3.更新也可以通过使用简单的脚本来执行。本示例使用脚本将年龄增加5:

POST /customer/_doc/1/_update?pretty
{
  "script" : "ctx._source.age += 5"

}

在上面的例子中,ctx._source引用了即将更新的当前源文档。

Elasticsearch提供了在查询条件下更新多个文档的能力(如SQL UPDATE-WHERE语句),

具体可以参考https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-update-by-query.html

2.删除文档


删除文档也很简单

DELETE /customer/_doc/2?pretty

我们也可以在官网查看删除相关api 地址https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-delete-by-query.html

3.批量处理

除了能够索引,更新和删除单个文档之外,Elasticsearch还提供了使用_bulk API批量执行上述任何操作的功能。此功能非常重要,因为它提供了一种非常高效的机制,尽可能快地完成多项操作,尽可能少的网络往返。_bulk API的地址为https://www.elastic.co/guide/en/elasticsearch/reference/6.2/docs-bulk.html

示例如下

POST /customer/_doc/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }

上述命令在调用在一次批量操作中索引两个文档(ID 1 - John Doe和ID 2 - Jane Doe)。现在我们使用批量操作更新第一个文档并删除id为2的文档

POST /customer/_doc/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": { "name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
请注意,对于删除操作,后面没有对应的源文档,因为删除操作只需要删除文档的标识。批量API不会因其中一个操作失败而失败。即不支持事务,如果一个动作因任何原因失败,它将继续处理其后的其余动作。当批量API返回时,它将为每个操作提供一个状态(按照它发送的相同顺序),以便您可以检查特定操作是否失败。

### 使用 Elasticsearch-head 插件修改 Elasticsearch 中的数据 Elasticsearch-head 是一个用于管理 Elasticsearch 集群的 Web 前端工具,它允许用户通过浏览器界面查看集群状态、索引结构以及文档内容。虽然它的主要功能是提供可视化管理和查询能力,但它也支持对现有数据进行更新操作。 #### 1. 连接至 Elasticsearch 实例 启动 `elasticsearch-head` 后,在浏览器中访问其页面并连接到目标 Elasticsearch 节点或集群。确保输入正确的主机名和端口号(默认为 `http://localhost:9200/`)。这一步可以通过点击界面上方的 “Connect” 按钮完成[^1]。 #### 2. 浏览索引与文档 一旦成功建立连接,可以从左侧导航栏选择特定索引来浏览其中存储的文档列表。每条记录通常会显示 `_id`, `_type`, 和实际字段值等内容[^2]。 #### 3. 编辑单个文档 要修改某个具体文档的内容: - 在对应索引下找到该文档; - 点击右侧的操作按钮进入编辑模式; - 对所需更改的属性重新赋值; - 提交保存后即完成了对该文档的部分更新请求 (Partial Update)[^3]。 注意:此过程实际上是发送了一次 HTTP PUT 请求给 Elasticsearch API 来实现数据变更的目的。 #### 4. 更新批量或多条目信息 对于更复杂的场景比如需要一次处理多份资料,则可能需要用到脚本或者直接调用 RESTful APIs 的方式来进行大规模改动。此时可以考虑编写自定义逻辑并通过 Kibana Dev Tools 或者 curl 工具手动触发相应命令[^4]。 以下是利用 JavaScript SDK 示例代码展示如何程序化地执行类似任务: ```javascript const { Client } = require('@elastic/elasticsearch'); async function run() { const client = new Client({ node: 'http://localhost:9200' }); await client.update({ index: 'your_index_name', id: 'document_id_to_update', body: { doc: { fieldToUpdate: newValue } } }); } run().catch(console.error); ``` 上述片段展示了怎样借助官方提供的 Node.js 库来异步安全地调整指定 ID 文档内的某些字段数值。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值