介绍
Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它被设计用于处理海量数据,并提供近实时的搜索和分析能力。
| 特性类别 | 核心要点 | 说明与应用价值 |
|---|---|---|
| 核心架构 | 分布式 & 高可用 | 数据自动分片并在集群中多节点存储,易于水平扩展,并能容忍节点故障。 |
| 近实时 (NRT) 搜索 | 数据写入后通常在 1 秒内即可被检索,非常适合监控和日志分析等场景。 | |
| RESTful API | 通过简单的 HTTP 请求和 JSON 数据格式进行操作,极大降低了使用门槛。 | |
| 核心技术 | 倒排索引 | 通过建立“词汇 -> 文档”的映射,实现了全文检索的高速查询。 |
| 强大的查询 DSL | 支持全文搜索、模糊查询、范围过滤、地理位置查询等复杂查询需求。 | |
| 聚合分析 | 提供强大的数据分组统计和计算能力,用于深度数据分析。 | |
| 主要应用场景 | 应用程序/网站搜索 | 为电商平台、内容网站等提供高效、精准的搜索功能。 |
| 日志与指标分析 (ELK Stack) | 与 Logstash、Kibana 等组成 ELK 技术栈,是日志集中管理和分析的经典方案。 | |
| 业务智能与安全分析 | 通过对业务数据或安全事件数据进行聚合分析,发现趋势和异常。 |
核心概念速览
理解以下几个关键术语,能帮助你更好地掌握 Elasticsearch:
- 索引:类似于关系型数据库中的“数据库”,是存储相关文档的集合。
- 文档:是信息的基本数据单元,以 JSON 格式表示,类似于数据库中的“一行记录”。
- 节点与集群:一个节点是一个 Elasticsearch 实例,多个节点组成一个集群,共同提供服务。
- 分片与副本:索引可以被分成多个分片,分布到不同节点上。每个分片都可以有副本,同时提供数据冗余和高可用性。
优势与挑战
- 主要优势:高性能(尤其擅长全文检索和复杂分析)、高可扩展性(可处理 PB 级别数据)、灵活性(支持各种数据类型)。
- 需要注意的方面:资源消耗相对较高(内存和磁盘 I/O)。学习曲线有一定坡度,尤其在分布式集群管理和性能调优方面。它不提供完整的事务支持(ACID),因此不适合像金融交易这类需要强一致性的场景。
生态与演进
Elasticsearch 通常与 Logstash(数据采集处理)和 Kibana(数据可视化)等组件共同构成 Elastic Stack(旧称 ELK Stack),提供一个完整的数据处理解决方案。另外,需要注意的是,在新版本中(7.x 以后),索引内的“类型”概念已被废弃,现在更推荐使用独立的索引来组织不同结构的数据。
快速开始
目录结构如下,详见

# .env.example
ELASTIC_PASSWORD=dAUl36wBVN
KIBANA_PASSWORD=CfHhxf8fzv
# docker-compose.yml
services:
elasticsearch:
container_name: elasticsearch
image: elasticsearch:8.12.2
#image: docker.cnb.cool/jinriyaojia_huigu/yaocai/devops/elasticsearch:8.12.2
restart: unless-stopped
user: 1000:1000
environment:
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
- "xpack.security.enabled=true" # 保持安全启用
- "xpack.security.http.ssl.enabled=false" # HTTP 禁用 SSL
- "xpack.security.transport.ssl.enabled=false" # 启用传输层 SSL
- "discovery.type=single-node"
- "ELASTIC_PASSWORD=${ELASTIC_PASSWORD}"
ports:
- "19200:9200" # Elasticsearch 默认的 HTTP 端口,用于接收 REST API 请求,比如搜索、索引文档等操作
# - "19300:9300" # Elasticsearch 默认的 Transport 端口,用于节点间通信和 Java 客户端的传输层连接
volumes:
- ./runtime/es/config:/usr/share/elasticsearch/config
- ./runtime/es/data:/usr/share/elasticsearch/data
- ./runtime/es/plugins:/usr/share/elasticsearch/plugins
- ./runtime/es/logs:/usr/share/elasticsearch/logs # 挂载日志目录
networks:
- elastic_net
ulimits:
nofile:
soft: 65535
hard: 65535
nproc:
soft: 4096
hard: 4096
memlock:
soft: -1
hard: -1
deploy:
resources:
limits:
memory: 2G
cpus: '2.0'
reservations:
memory: 1G
cpus: '1.0'
logging:
driver: json-file
options:
max-size: "30m"
max-file: "10"
kibana:
container_name: kibana
image: kibana:8.12.2
#image: docker.cnb.cool/jinriyaojia_huigu/yaocai/devops/kibana:8.12.2
restart: unless-stopped
environment:
# - "TZ=Asia/Shanghai"
- "TZ=UTC"
- "I18N_LOCALE=zh-CN"
- "ELASTICSEARCH_SSL_VERIFICATIONMODE=none" # 开发环境禁用证书验证
# 禁用不需要的功能
- "XPACK_SECURITY_LOGIN_HELP_ENABLED=false"
- "XPACK_SECURITY_PASSWORD_RESET_ENABLED=false"
- "XPACK_SECURITY_SESSION_IDLE_TIMEOUT=1h"
- "SERVER_HOST=0.0.0.0"
- "SERVER_NAME=kibana"
- "NODE_OPTIONS=--max-old-space-size=800" # 设置 Node.j

最低0.47元/天 解锁文章
972

被折叠的 条评论
为什么被折叠?



