Elasticsearch 从入门到精通:分布式搜索引擎与日志分析实战
Logstash 用于将日志或数据导入 Elasticsearch。Kibana 是 Elasticsearch 的可视化分析工具。Elasticsearch(简称 ES)是一个基于。Dev Tools(在线执行 ES 查询)它可以存储海量数据并在毫秒级内完成搜索。的分布式搜索和分析引擎,用于。Visualize 图表分析。Dashboard 仪表盘。Discover 实时搜索。
一、Elasticsearch 是什么
Elasticsearch(简称 ES)是一个基于 Lucene 的分布式搜索和分析引擎,用于 全文检索、日志分析、实时监控、数据可视化 等场景。
它可以存储海量数据并在毫秒级内完成搜索。
一句话概括:
Elasticsearch = 搜索引擎 + 数据分析平台 + 分布式存储系统。
二、核心特性
| 功能 | 描述 |
|---|---|
| 分布式架构 | 节点可横向扩展,自动分片与复制 |
| 高性能全文检索 | 基于倒排索引的文本搜索 |
| 实时数据分析 | 聚合查询性能极强 |
| RESTful API | 使用 HTTP + JSON 交互 |
| 近实时搜索(NRT) | 数据写入后即可被检索 |
| 高可用性 | 副本机制保证容错 |
| 可视化集成 | 与 Kibana 配合提供图形化界面 |
三、安装与启动
1. 安装(Linux)
sudo apt update sudo apt install openjdk-17-jdk -y wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.0-amd64.deb sudo dpkg -i elasticsearch-8.13.0-amd64.deb
2. 启动服务
sudo systemctl enable elasticsearch sudo systemctl start elasticsearch
3. 测试连接
curl -X GET "localhost:9200/"
返回信息中包含 cluster_name 和 version 即表示成功。
四、核心概念
| 概念 | 类比关系 | 说明 |
|---|---|---|
| Index(索引) | 数据库 | 存储数据的逻辑命名空间 |
| Document(文档) | 行 | 存储的 JSON 数据 |
| Field(字段) | 列 | 文档的属性 |
| Shard(分片) | 分区 | 索引分成多个逻辑块 |
| Replica(副本) | 备份 | 提高高可用性与查询性能 |
| Node(节点) | 服务器 | Elasticsearch 实例 |
| Cluster(集群) | 数据库集群 | 一组节点组成的系统 |
五、创建索引与文档
创建索引
curl -X PUT "localhost:9200/company"
添加文档
curl -X POST "localhost:9200/company/_doc/1" -H 'Content-Type: application/json' -d' { "name": "Tom", "age": 30, "department": "IT", "salary": 8000 }'
查询文档
curl -X GET "localhost:9200/company/_doc/1"
六、批量操作(Bulk API)
curl -X POST "localhost:9200/_bulk" -H 'Content-Type: application/json' -d' { "index" : { "_index" : "company", "_id" : "2" } } { "name" : "Lucy", "age" : 25, "department" : "HR", "salary" : 7000 } { "index" : { "_index" : "company", "_id" : "3" } } { "name" : "David", "age" : 35, "department" : "Finance", "salary" : 12000 } '
七、搜索文档
基础搜索
curl -X GET "localhost:9200/company/_search?q=IT"
高级查询(Query DSL)
curl -X POST "localhost:9200/company/_search" -H 'Content-Type: application/json' -d' { "query": { "match": { "department": "IT" } } }'
多条件查询
{ "query": { "bool": { "must": [ { "match": { "department": "IT" }}, { "range": { "salary": { "gte": 8000 } }} ] } } }
八、分页与排序
{ "from": 0, "size": 10, "sort": [ { "salary": "desc" } ] }
九、聚合分析(Aggregations)
按部门统计平均工资:
{ "aggs": { "avg_salary": { "terms": { "field": "department.keyword" }, "aggs": { "avg_salary": { "avg": { "field": "salary" } } } } } }
统计文档数量:
{ "size": 0, "aggs": { "dept_count": { "terms": { "field": "department.keyword" } } } }
十、全文检索与模糊匹配
模糊查询
{ "query": { "fuzzy": { "name": { "value": "Tomm", "fuzziness": 2 } } } }
通配符查询
{ "query": { "wildcard": { "name": "Lu*" } } }
十一、映射(Mapping)
定义字段类型:
curl -X PUT "localhost:9200/company" -H 'Content-Type: application/json' -d' { "mappings": { "properties": { "name": { "type": "text" }, "age": { "type": "integer" }, "salary": { "type": "float" }, "department": { "type": "keyword" } } } }'
参考案例:www.rxfgt.cn
十二、更新与删除
更新文档:
curl -X POST "localhost:9200/company/_update/1" -H 'Content-Type: application/json' -d' { "doc": { "salary": 9000 } }'
删除文档:
curl -X DELETE "localhost:9200/company/_doc/3"
删除索引:
curl -X DELETE "localhost:9200/company"
十三、全文搜索高亮显示
{ "query": { "match": { "department": "IT" }}, "highlight": { "fields": { "department": {} } } }
十四、Kibana 可视化
Kibana 是 Elasticsearch 的可视化分析工具。
安装后访问:
http://localhost:5601
常用功能:
-
Dashboard 仪表盘
-
Discover 实时搜索
-
Visualize 图表分析
-
Dev Tools(在线执行 ES 查询)
十五、Logstash 日志采集
Logstash 用于将日志或数据导入 Elasticsearch。
配置文件示例:
logstash.conf
input { file { path => "/var/log/nginx/access.log" start_position => "beginning" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } output { elasticsearch { hosts => ["localhost:9200"] index => "nginx-logs" } }
启动:
logstash -f logstash.conf
十六、分片与副本配置
curl -X PUT "localhost:9200/logs" -H 'Content-Type: application/json' -d' { "settings": { "index": { "number_of_shards": 3, "number_of_replicas": 1 } } }'
十七、安全与认证
启用安全认证:
elasticsearch-setup-passwords interactive
登录验证:
curl -u elastic:yourpassword -X GET "localhost:9200/_cluster/health"
十八、性能优化技巧
-
合理设置分片与副本数
-
使用 keyword 类型进行聚合查询
-
开启缓存与索引压缩
-
禁用不必要字段的
_source存储 -
定期合并小索引(force merge)
-
使用 ILM(Index Lifecycle Management) 自动清理旧数据
十九、监控与维护
查看集群健康
curl -X GET "localhost:9200/_cluster/health?pretty"
查看节点状态
curl -X GET "localhost:9200/_cat/nodes?v"
查看索引情况
curl -X GET "localhost:9200/_cat/indices?v"
二十、企业级实战场景
| 场景 | 实践方案 |
|---|---|
| 日志分析平台 | ELK(Elasticsearch + Logstash + Kibana) |
| 全文检索系统 | 网站搜索、文档查询、知识库系统 |
| 实时监控告警 | 与 Beats、AlertManager 结合使用 |
| 电商数据分析 | 聚合订单、用户、商品行为 |
| 安全审计 | 统一收集防火墙与系统日志 |
| 推荐系统 | 实时分析与搜索结合 |
更多推荐


所有评论(0)