关于 elasticsearch
面向 Elasticsearch 搜索与分析工作的专业技能,涵盖集群架构、查询 DSL、映射设计和性能优化,适用于搜索、日志分析与时序数据平台。
主要功能
- 01设计映射与索引别名
- 02构建 bool 查询和聚合
- 03配置 ILM 与数据保留
- 04排查集群分片分配问题
- 05优化搜索性能与缓存
适用场景
- 01构建自动补全搜索体验
- 02设计日志分析和时序数据平台
- 03执行索引迁移与零停机重建
- 04规划快照恢复与灾难恢复
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ rightnow-ai/ openfang --skill elasticsearch安装后在 Claude Code 中输入/elasticsearch确认已加载。
详细介绍
Elasticsearch 专家
搜索与分析专家,深谙 Elasticsearch 集群架构、查询 DSL、映射设计和性能优化。此技能为使用 Elastic stack 构建搜索体验、日志分析管道和时序数据平台提供生产级指导。
核心原则
- 在索引数据前明确设计映射;依赖动态映射会导致字段类型冲突和索引膨胀
- 理解 keyword 字段(精确匹配、聚合、排序)与 text 字段(使用分析器进行全文搜索)之间的区别
- 使用索引别名实现零停机重新索引、金丝雀部署和基于时间的索引轮换
- 将分片大小控制在 10-50 GB,以获得最佳性能;过多的小分片会浪费开销,过少的大分片则会限制并行处理能力
- 持续监控集群健康状态(green/yellow/red),并立即调查 yellow 状态,因为这表示存在未分配的副本分片
技术
- 使用 must(计分 AND)、filter(不计分 AND)、should(OR,带有 minimum_should_match)和 must_not(排除)子句构建 bool 查询
- 使用 match 查询进行全文搜索,并根据分析器进行分词;使用 term 查询进行无需分析的精确 keyword 查找
- 构建聚合:使用 terms 获取基数排名前 N 的结果,使用 date_histogram 按时间分桶,使用 nested 分析子文档,并使用 cumulative_sum 等管道聚合
- 应用包含 hot/warm/cold/delete 阶段的索引生命周期管理(ILM)策略,以自动执行滚动和数据保留
- 使用包含 source/dest 的 POST _reindex 进行重新索引,并在迁移期间应用脚本转换字段
- 使用 GET _cluster/allocation/explain 检查集群分配情况,诊断分片未分配的原因
- 使用搜索分析器 API、请求缓存和预热来调整常用查询的搜索性能
常见模式
- 边输入边搜索:使用 search_as_you_type 字段类型,或使用 edge_ngram 分词器搭配 match_phrase_prefix 查询,实现自动补全体验
- 父子关系:对于子文档可独立更新的一对多关系,使用 join 字段类型,避免代价高昂的嵌套文档重新索引
- 跨集群搜索:配置远程集群,并使用 cluster:index 语法透明地查询多个 Elasticsearch 部署
- 快照与恢复:注册快照存储库(S3、GCS 或文件系统),并使用 SLM 策略定期安排快照,以便进行灾难恢复
应避免的问题
- 不要对带有前导通配符的 text 字段使用通配符查询,因为这会绕过倒排索引并导致扫描整个字段
- 不要在未拆分的情况下索引大型文档(超过 100 MB),因为它们会在索引和合并期间造成内存压力
- 不要在生产环境中将 number_of_replicas 设为 0;副本既能提高搜索吞吐量,也能提供数据冗余
- 不要在现有索引上更新不兼容类型变更的映射;应使用正确的映射创建新索引,并重新索引数据
评论
支持 Markdown