插入文档|Elasticsearch 七日笔记 05
本文接着创建索引,往刚建好的 users 索引里写数据。
定义与方式
文档(Document)是 ES 中的最小数据单元,插入文档是将数据写入索引的过程。ES 提供两种插入方式:
- 自动生成 ID:
- 使用
POST /<index_name>/_doc。 - ES 会生成一个随机 UUID 作为文档 ID。
- 使用
- 指定 ID:
- 使用
PUT /<index_name>/_doc/<id>。 - 手动指定文档的唯一标识符。
- 使用
示例
- 自动生成 ID:
POST /users/_doc { "name": "Alice", "age": 25 }- 返回:
{ "_index": "users", "_id": "abc123xyz789", "result": "created" }
- 返回:
- 指定 ID:
PUT /users/_doc/1 { "name": "Bob", "age": 30 }- 返回:
{ "_index": "users", "_id": "1", "result": "created" }
- 返回:
插入机制
- 倒排索引:
- 插入时,ES 会对
text字段(如name)进行分词,构建倒排索引。 - 例如,“Alice” 被分词为
["alice"](小写)。
- 插入时,ES 会对
- 近实时性:
- 数据写入后,默认 1 秒内可搜索(受
refresh_interval控制)。
- 数据写入后,默认 1 秒内可搜索(受
注意事项
PUTvsPOST:PUT需要指定 ID,若 ID 已存在则覆盖。POST自动生成 ID,适合批量插入。
- 字段动态性:
- 可以插入未定义的字段,ES 会自动添加到映射。
动手实践:插入 3 条测试数据
目标
- 向
users索引插入 3 条测试数据。
步骤
- 插入第一条(指定 ID):
PUT /users/_doc/1 { "name": "Alice", "age": 25 }- 检查返回:
"result": "created"
- 检查返回:
- 插入第二条(自动 ID):
POST /users/_doc { "name": "Bob", "age": 30 }- 记录返回的
_id(如"abc123xyz789")。
- 记录返回的
- 插入第三条:
PUT /users/_doc/3 { "name": "Charlie", "age": 28 } - 验证:
- 查询:
GET /users/_doc/1 - 确认返回 Alice 的数据。
- 查询:
注意事项
- 插入后等待 1 秒,确保数据可查(近实时性)。
- 记录自动生成的 ID,以便后续操作。
关键点
- 近实时性:
- 数据操作后需短暂等待(默认 1 秒)才能查询。
常见问题及解决方法
- 问题:插入后无法查询到数据。
- 原因:近实时延迟。
- 解决:
- 等待 1 秒后查询。
- 强制刷新:
POST /users/_refresh。
学习建议
- 理解机制:
- 思考倒排索引如何加速查询。
- 画出文档插入到索引的过程图。
本文是《Elasticsearch 七日笔记》系列的第 5 篇,对应第 2 天的学习内容。
