修改弹性搜索数据
Elasticsearch 几乎可以实时提供数据处理和数据搜索功能。在这个例子中,我们有更新,删除和批处理操作。
- 更新同一文档。假设我们已经在/ car / external / 1 上索引了一个文档。然后运行用于索引数据的命令将替换先前的文档。
PUT /car/external/1?pretty
{
"name": "Tata Nexa"
}
之前名为 Tata Nexon
的 id 1 的汽车文件将更新为新名称 Tata Nexa
- 使用显式 Id 索引数据
POST /car/external?pretty
{
"name": "Jane Doe"
}
为了在没有 Id 的情况下索引文档,我们使用 POST 动词而不是 PUT 动词。如果我们不提供 Id,elasticsearch 将生成一个随机 ID,然后使用它来索引文档。
- 部分更新 Id 上的先前文档。
POST /car/external/1/_update?pretty
{
"doc": { "name": "Tata Nex" }
}
- 使用其他信息更新文档
POST /car/external/1/_update?pretty
{
"doc": { "name": "Tata Nexon", "price": 1000000 }
}
- 使用简单脚本更新文档。
POST /car/external/1/_update?pretty
{
"script" : "ctx._source.price += 50000"
}
ctx._source 指的是即将更新的当前源文档。上面的脚本只提供了一个要同时更新的脚本。
- 删除文档
DELETE /car/external/1?pretty
注意:删除整个索引比使用 Delete by Query API 删除所有文档更有效
批量处理
除了索引更新和删除文档之外,elasticsearch 还提供了使用 _bulk API 批量执行上述任何操作的功能。
- 使用 _bulk API 更新多个文档
POST /car/external/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "Tata Nexon" }
{"index":{"_id":"2"}}
{"name": "Tata Nano" }
- 使用 _bulk API 更新和删除文档
POST /car/external/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": { "name": "Tata Nano" } }
{"delete":{"_id":"2"}}
如果操作失败,批量 API 不会停止。它执行所有操作并最终返回所有操作的报告。