一、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_nameversion 即表示成功。


四、核心概念

概念 类比关系 说明
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"


十八、性能优化技巧

  1. 合理设置分片与副本数

  2. 使用 keyword 类型进行聚合查询

  3. 开启缓存与索引压缩

  4. 禁用不必要字段的 _source 存储

  5. 定期合并小索引(force merge)

  6. 使用 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 结合使用
电商数据分析 聚合订单、用户、商品行为
安全审计 统一收集防火墙与系统日志
推荐系统 实时分析与搜索结合
Logo

更多推荐