Elasticsearch 文档操作的核心方法

索引文档
通过HTTP PUT或POST请求将文档添加到索引中。PUT需指定ID,POST由Elasticsearch自动生成ID。
示例(使用PUT):

PUT /my_index/_doc/1
{
  "title": "Elasticsearch Guide",
  "content": "Distributed search and analytics engine",
  "tags": ["search", "database"]
}

获取文档
使用GET请求通过ID检索文档,可通过_source字段过滤返回内容。
示例:

GET /my_index/_doc/1

更新与删除文档

部分更新
使用_update端点结合docscript进行局部修改。脚本更新支持Painless语言。
示例(使用doc):

POST /my_index/_update/1
{
  "doc": {
    "tags": ["search", "database", "nosql"]
  }
}

删除文档
通过DELETE请求移除文档,删除后不会立即从磁盘清除,而是在段合并时清理。
示例:

DELETE /my_index/_doc/1

批量操作与版本控制

批量API
通过_bulk端点实现索引、更新、删除的批量处理,减少网络开销。每行需包含操作类型和元数据。
示例:

POST _bulk
{ "index" : { "_index" : "my_index", "_id" : "2" } }
{ "title": "Bulk API", "category": "operations" }
{ "delete" : { "_index" : "my_index", "_id" : "1" } }

乐观并发控制
使用version参数或外部版本号(version_type=external)避免写冲突。版本号不匹配时操作失败。
示例:

PUT /my_index/_doc/1?version=2&version_type=external
{
  "title": "Concurrency Control"
}

高级文档操作技巧

路由优化
指定routing参数将相关文档存储在同一分片,提升查询效率。
示例:

PUT /my_index/_doc/3?routing=user123
{
  "user_id": "user123",
  "action": "login"
}

实时获取
通过GET请求的realtime参数(默认启用)确保读取最新数据,或结合refresh立即刷新索引。
示例:

GET /my_index/_doc/3?realtime=true

字段更新检测
使用detect_noop=false强制更新即使内容未变化,适用于需要触发副作用的场景。
示例:

POST /my_index/_update/3
{
  "detect_noop": false,
  "doc": { "last_updated": "2023-10-01" }
}

更多推荐