name: elasticsearch-design description: 帮助Agent为项目进行Elasticsearch索引设计、Mapping设计、搜索查询设计,并提供场景化使用指南。当用户需要设计搜索引擎Schema、优化全文搜索、规划日志/APM/向量搜索方案时触发。 version: 1.0.1 metadata: clawdbot: emoji: "🔍" requires: anyBins: ["elasticsearch"] os: ["linux", "darwin"]
当用户出现以下意图时激活本 Skill: - 设计 Elasticsearch 索引 / Mapping - 全文搜索 / 向量搜索方案 - 日志分析 / APM 数据建模 - 索引模板 / ILM 生命周期设计 - 搜索性能优化 - "如何设计 xxx 的搜索"
0. 版本检查 → 加载 references/version-major.md 对比用户版本,识别废弃项和重大变更。同时加载所有 version-X.Y.md(X.Y ≤ 用户目标版本),后续设计过程中 Agent 从已加载的上下文中自主匹配深度特性
1. 需求分析 → 理解搜索场景(全文/向量/混合/聚合)、写入吞吐、数据量级
2. 索引设计 → 索引命名、分片数/副本数、刷新间隔、ILM 策略
3. Mapping 设计 → 字段类型、分词器、动态模板、运行时字段
4. 查询设计 → Query DSL / ES|QL / 混合搜索(BM25 + kNN)
5. 写入设计 → 批量写入、管道预处理、别名切换
6. 使用指引 → 加载 references/usage-guide.md,给出场景化操作
7. 生产建议 → 加载 references/best-practices.md,给出集群/高可用/监控建议
8. 模板参考 → 加载 references/patterns.md,匹配业务索引模板
小葱技能站7w4.net,专业的AI技能分享平台。
| 规则 | 示例 | 反例 |
|---|---|---|
格式:<项目>-<数据类型>-<时间粒度> |
app-logs-2026.06 |
logs |
| 小写+连字符 | ecom-products-v1 |
ecom_Products_V1 |
| 按时间滚动必须带日期后缀 | metrics-system-2026.06.09 |
固定索引名 |
| 版本后缀(别名指向当前版本) | search-products-v2(别名 search-products) |
别名混乱 |
| 维度 | 推荐值 | 说明 |
|---|---|---|
| 主分片数 | 1(优先按单分片 10-50GB 计算) | 分片数过多导致开销,过少限制并行度 |
| 单分片大小 | 10-50GB | 超过 50GB 考虑拆分索引或增加分片 |
| 副本数 | 1(生产)/ 0(开发) | 至少 1 个副本保高可用 |
| 每 GB 堆的分片数 | ≤ 20 | 每个节点不超过 1000 个分片 |
| 类型 | 使用场景 | Mapping 示例 |
|---|---|---|
text |
全文搜索(会分词) | "type": "text", "analyzer": "ik_max_word" |
keyword |
精确匹配/聚合/排序 | "type": "keyword" |
long / integer |
整数 | "type": "long" |
float / double / scaled_float |
小数;金额用 scaled_float |
"type": "scaled_float", "scaling_factor": 100 |
boolean |
布尔值 | "type": "boolean" |
date |
时间(ISO 8601 / epoch) | "type": "date", "format": "yyyy-MM-dd HH:mm:ss" |
geo_point |
经纬度坐标 | "type": "geo_point" |
dense_vector |
向量嵌入(kNN 搜索) | "type": "dense_vector", "dims": 1536, "index": true |
object |
嵌套 JSON 对象 | "type": "object" |
nested |
独立索引的对象数组 | "type": "nested" |
ip |
IP 地址 | "type": "ip" |
binary |
Base64 二进制 | "type": "binary" |
| 原则 | 说明 |
|---|---|
| 禁止动态 Mapping 到生产 | "dynamic": "strict" 或 "runtime" |
| 字符串双字段 | 需要搜索+聚合时为 text+keyword;纯 ID/枚举用 keyword |
| 关闭不必要的 norms/index | "norms": false、"index": false 减少存储 |
| 避免 field explosion | flattened 类型处理高基数不可预知的 Key |
| 运行时字段替代 Script | runtime_mappings 定义计算字段,不占存储 |
| 语言/场景 | 分词器 | 说明 |
|---|---|---|
| 中文 | ik_max_word(索引)/ ik_smart(搜索) |
需安装 IK 插件 |
| 英文 | standard / english |
内置 |
| 多语言 | 独立字段 + 不同分词器 | 每个语言一个 text 子字段 |
| 拼音搜索 | pinyin 插件 |
中文拼音混合搜索 |
| 不分词 | keyword 类型 |
精确匹配用 |
详细内容按需加载 references/:
| 主题 | 文件 | 何时加载 |
|---|---|---|
| 索引/Mapping/字段/分词设计规范 | references/design-spec.md |
Step 2-3 索引和 Mapping 设计 |
| 场景化操作(创建索引/搜索/聚合/别名/ILM) | references/usage-guide.md |
Step 6 使用指引 |
| 最佳实践(分片/集群/写入/查询/监控/运维) | references/best-practices.md |
Step 7 生产建议 |
| 业务索引模板(6类业务完整Mapping+配置) | references/patterns.md |
Step 8 模板参考 |
| 重大版本特性(废弃/依赖变更/新模块) | references/version-major.md |
Step 0 版本检查(模块激活时即加载) |
| 深度版本特性 — 9.x(Workflows / ES|QL 增强 / PromQL / GPU 向量 / FIPS) | references/version-9.0.md |
Step 0 版本检查时自动加载(版本 ≤ 用户目标版本时) |
| 深度版本特性 — 8.x(向量搜索 / ILM / SLM / Data Streams / ES|QL) | references/version-8.0.md |
Step 0 版本检查时自动加载(版本 ≤ 用户目标版本时) |
references/version-major.md,Agent 需主动对比用户使用的 Elasticsearch 版本,若存在废弃项或重大变更,立即提示用户version-9.0.md 包含该大版本下所有小版本的设计级特性。更新时在文件中新增 ## X.Y.Z 版本节即可,不单开文件"dynamic": "strict" 或 "runtime",禁止完全动态映射text+keyword 双字段;纯 ID/枚举仅用 keyword_source.enabled: false(除非纯指标场景),丢失原始数据无法修复_bulk API 批量写入(吞吐量差 10-100 倍),非高频场景允许单条写入timeout(分片级软超时)和 track_total_hits 限制,避免无界搜索质量较好,专业度高。优点是触发条件清晰、覆盖内容全面(索引设计、Mapping、分片策略、日志优化等),最佳实践和常见坑总结实用。不足是缺少可直接用的代码示例,实操性偏弱。对于需要深度 Elasticsearch 设计指导的用户很有帮助,但期望拿来即用的用户可能会觉得不够。总体推荐,需要补充更多具体示例来提升实用性。