修改弹性搜索数据

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 不会停止。它执行所有操作并最终返回所有操作的报告。