Elasticsearch 学习笔记
一套基于 Lucene 构建的分布式搜索引擎,支持全文检索、结构化数据查询、聚合分析等,是 ELK(Elasticsearch + Logstash + Kibana)技术栈的核心组件。
一、Elasticsearch 基础概念
1. 什么是 Elasticsearch?
- 开源的、分布式、RESTful 风格的搜索与分析引擎;
- 基于 Lucene,具备高可扩展性、实时检索与分析能力;
- 可用于日志分析、电商搜索、推荐系统、数据监控等场景。
2. 核心术语
名称 | 说明 |
---|---|
Cluster | 一个或多个节点组成的集合,具有统一的名称 |
Node | 集群中的一个实例(Java 进程) |
Index | 类似数据库中的数据库(DB),文档的逻辑集合 |
Document | 一条数据记录,JSON 格式 |
Type | (已废弃)曾用于区分不同文档类型 |
Shard | 索引的物理分片,用于分布式存储 |
Replica | 主分片的副本,提高容错能力 |
二、安装与启动
1. Docker 安装
docker pull elasticsearch:8.12.0
docker run -d --name es -p 9200:9200 -e "discovery.type=single-node" elasticsearch:8.12.0
访问:http://localhost:9200
三、索引操作
1. 创建索引
PUT /my_index
带映射(mapping)和设置:
PUT /products
{"settings": {"number_of_shards": 1,"number_of_replicas": 1},"mappings": {"properties": {"name": { "type": "text" },"price": { "type": "double" },"tags": { "type": "keyword" }}}
}
2. 删除索引
DELETE /my_index
3. 查看所有索引
GET /_cat/indices?v
四、文档操作
1. 插入文档(自动生成 ID)
POST /products/_doc
{"name": "iPhone 15","price": 7999,"tags": ["apple", "smartphone"]
}
2. 按 ID 获取文档
GET /products/_doc/1
3. 更新文档
POST /products/_update/1
{"doc": {"price": 7499}
}
4. 删除文档
DELETE /products/_doc/1
五、搜索查询(Query DSL)
1. 基本全文匹配
GET /products/_search
{"query": {"match": {"name": "iPhone"}}
}
2. 精确匹配
GET /products/_search
{"query": {"term": {"tags": "apple"}}
}
3. 布尔组合查询
GET /products/_search
{"query": {"bool": {"must": [{ "match": { "name": "iPhone" }},{ "range": { "price": { "lt": 8000 }}}]}}
}
六、聚合(Aggregations)
GET /products/_search
{"size": 0,"aggs": {"avg_price": {"avg": {"field": "price"}}}
}
七、Mapping 映射与字段类型
常用字段类型:
类型 | 说明 |
---|---|
text | 支持分词、全文搜索 |
keyword | 不分词,适合标签、枚举值 |
integer | 整数 |
float | 浮点数 |
date | 日期 |
boolean | 布尔值 |
八、分词器与分析器
示例:查看分析效果
GET /_analyze
{"analyzer": "standard","text": "Elasticsearch is amazing!"
}
返回结果为一组 token(分词结果)。
九、性能优化建议
- 减少索引数量(Index 不宜太多);
- 合理设置分片数量(Shard ≠ 越多越好);
- 用
keyword
替代text
进行结构化查询; - 使用
filter
替代must
可复用缓存; - 使用聚合时设置
size: 0
减少返回数据量。
十、常用命令速查表
操作 | 命令 |
---|---|
创建索引 | PUT /index |
删除索引 | DELETE /index |
插入文档 | POST /index/_doc |
获取文档 | GET /index/_doc/id |
更新文档 | POST /index/_update/id |
删除文档 | DELETE /index/_doc/id |
搜索 | GET /index/_search |
查看所有索引 | GET /_cat/indices?v |
分析文本 | GET /_analyze |
十一、实用工具与插件
- Kibana:可视化界面,调试查询语句,实时监控;
- Postman:用于调试 API 请求;
- Elasticdump:备份与迁移索引数据的命令行工具;
- Head 插件(Chrome):轻量级管理界面。
十二、应用场景
- 日志检索:搭配 Logstash + Beats,快速日志搜索;
- 电商搜索:支持高性能商品搜索、自动补全;
- 实时数据分析:替代传统 BI 报表;
- 推荐系统:结合用户行为分析做个性推荐;
- 智能问答:基于内容索引匹配相似问题。