网站开发设计是前端吗,自己怎样学做网站,安徽龙山建设有限公司网站,公司做网站费用和人员配备文档#xff08;一#xff09;#xff1a;新增 删除 1.文档的关键特性2.新增文档2.1 指定 ID 新增文档2.2 不指定 ID 新增文档2.3 指定索引批量插入数据2.4 批量执行多种操作2.5 关键说明 3.删除文档3.1 删除单个文档3.2 批量文档删除3.2.1 方法 1#xff1a;使用 _b… 文档一新增 删除 1.文档的关键特性2.新增文档2.1 指定 ID 新增文档2.2 不指定 ID 新增文档2.3 指定索引批量插入数据2.4 批量执行多种操作2.5 关键说明 3.删除文档3.1 删除单个文档3.2 批量文档删除3.2.1 方法 1使用 _bulk 删除多个指定 ID 的文档3.2.2 方法 2使用 _delete_by_query 删除符合查询条件的文档3.2.3 关键区别 3.3 最佳实践 在 Elasticsearch 中文档Document是 最小的可索引数据单元也是信息存储和检索的基本单位。它是 Elasticsearch 的核心概念之一类似于关系型数据库中的一行记录或 NoSQL 数据库中的一个 JSON 对象。
1.文档的关键特性 JSON 格式文档是一个 JSON 对象由键值对字段和值组成。例如 {_index: books, // 所属索引_id: 1, // 文档ID_source: { // 文档原始内容title: Elasticsearch 指南,author: John Doe,publish_date: 2023-10-01}
}唯一标识每个文档有一个唯一的 _id可自定义或由 Elasticsearch 自动生成用于在索引中唯一标识该文档。 归属于索引文档必须存储在某个 索引Index中类似关系型数据库的 “表”。例如一个书籍文档可能存储在 books 索引中。 可扩展字段文档的字段是动态的无需预先定义结构除非使用显式映射。字段类型如文本、数字、日期等会自动推断或通过映射Mapping指定。 支持嵌套和复杂结构文档可以包含嵌套对象、数组等复杂结构。例如 {user: {name: Alice,address: {city: Beijing,postcode: 100000}}
}2.新增文档
2.1 指定 ID 新增文档
场景明确指定文档的 _id如书籍 ISBN 作为唯一标识。
PUT /books/_doc/101 # 索引名: books, 文档ID: 101
{title: 深入理解 Elasticsearch,author: 张三,price: 59.9,publish_date: 2023-05-20
}2.2 不指定 ID 新增文档
场景让 Elasticsearch 自动生成唯一 _id如日志场景。
POST /logs/_doc # 索引名: logs, 不提供ID
{level: ERROR,message: 数据库连接超时,timestamp: 2023-10-25T14:30:00Z
}2.3 指定索引批量插入数据
场景一次性插入多条文档到同一索引如商品批量导入。
POST /products/_bulk
{ index: {} } # 不指定ID自动生成
{ name: 无线鼠标, price: 99, category: 电子产品 }
{ index: { _id: 1001 } } # 指定ID为1001
{ name: 机械键盘, price: 299, category: 电子产品 }2.4 批量执行多种操作
场景混合插入、更新、删除操作如订单系统数据处理。
POST /orders/_bulk
{ index: { _id: O20230999 } } # 新增订单
{ order_id: O20230999, amount: 1500, status: paid }
{ index: { _id: O20230998 } } # 新增订单
{ order_id: O20230998, amount: 1500, status: paid }POST /orders/_bulk
{ index: { _id: O20231001 } } # 新增订单
{ order_id: O20231001, amount: 1500, status: paid }
{ update: { _id: O20230999 } } # 更新订单状态
{ doc: { status: shipped } }
{ delete: { _id: O20230998 } } # 删除订单2.5 关键说明
批量操作_bulk 每两行为一个操作首行声明动作index / update / delete次行为数据或参数。需确保 JSON 格式严格换行末尾换行符不可省略。 自动生成 ID 不指定 _id 时Elasticsearch 会生成类似 x5F6Z4wB3Kp2YvE1 的唯一字符串。 HTTP 方法 新增单条文档PUT指定 ID或 POST不指定 ID。批量操作POST /_bulk。
实际应用中建议使用 Elasticsearch 客户端如 Python 的 elasticsearch-py简化操作。
3.删除文档
3.1 删除单个文档
场景删除指定 _id 的文档例如删除某本书。
DELETE /books/_doc/101 # 删除索引 books 中 _id101 的文档响应
{_index: books,_id: 101,_version: 2, # 版本号递增result: deleted, # 删除成功_shards: {total: 2,successful: 2,failed: 0}
}说明
如果文档不存在返回 result: not_found。删除操作是 逻辑删除文档不会立即从磁盘移除而是在后续段合并时清理。
3.2 批量文档删除
场景批量删除符合特定条件的文档例如删除所有 statusexpired 的订单。
3.2.1 方法 1使用 _bulk 删除多个指定 ID 的文档
POST /orders/_bulk
{ delete: { _id: O20231001 } }
{ delete: { _id: O20231002 } }
{ delete: { _id: O20231003 } } 响应
{took: 10,errors: false,items: [{ delete: { _id: O20231001, status: 200 } },{ delete: { _id: O20231002, status: 200 } },{ delete: { _id: O20231003, status: 200 } }]
}3.2.2 方法 2使用 _delete_by_query 删除符合查询条件的文档
POST /orders/_delete_by_query
{query: { term: { status: expired } # 删除所有 statusexpired 的文档}
}响应
{took: 100,timed_out: false,total: 5, # 共删除5条deleted: 5,batches: 1
}说明
_delete_by_query 适用于 按条件删除但会触发索引刷新可能影响性能。大数据量删除时建议添加 conflicts: proceed 参数跳过冲突和 scroll_size: 1000分批处理。
3.2.3 关键区别
操作类型适用场景性能影响单条删除DELETE精确删除指定 _id 的文档低开销但多次调用效率低批量删除_bulk删除多个已知 _id 的文档网络和 I/O 优化高效条件删除_delete_by_query删除符合查询条件的文档触发查询和刷新大数据量时较慢
3.3 最佳实践
优先使用 _bulk批量删除已知 ID 的文档时_bulk 比单条删除快 10-100 倍。慎用 _delete_by_query大数据量删除时建议在低峰期执行或使用 slices 并行化POST /orders/_delete_by_query?conflictsproceedslices5
{query: { range: { create_time: { lte: 2023-01-01 } } }
}强制物理删除删除后执行 _forcemerge 清理磁盘空间POST /orders/_forcemerge?only_expunge_deletestrue