Elasticsearch
外观
Elasticsearch[编辑 | 编辑源代码]
Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它提供了一个近实时的全文搜索能力,能够处理大规模数据集,广泛应用于日志分析、全文检索、业务智能等领域。
核心特性[编辑 | 编辑源代码]
Elasticsearch 具有以下主要特性:
- 分布式架构:数据自动分片并在集群中分布
- 近实时搜索:数据索引后几乎立即可搜索
- RESTful API:通过 HTTP 接口进行操作
- 多租户支持:支持多个索引和类型
- 强大的查询 DSL:提供丰富的查询语言
- 自动故障转移:高可用性设计
- 水平扩展:可轻松扩展处理更大数据量
基本概念[编辑 | 编辑源代码]
索引(Index)[编辑 | 编辑源代码]
索引是 Elasticsearch 中最高级别的数据结构单元,类似于关系型数据库中的"数据库"概念。一个索引包含多个文档。
类型(Type)[编辑 | 编辑源代码]
在 7.x 版本之前,索引可以包含多个类型(类似于关系型数据库中的"表"),但从 7.x 开始,类型概念已被弃用。
文档(Document)[编辑 | 编辑源代码]
文档是 Elasticsearch 中最小的数据单元,使用 JSON 格式表示。每个文档都有一个唯一 ID。
分片(Shard)[编辑 | 编辑源代码]
索引可以被分成多个分片,每个分片是一个完整的 Lucene 索引实例,可以分布在集群的不同节点上。
副本(Replica)[编辑 | 编辑源代码]
每个分片可以有零个或多个副本,用于提高系统的容错能力和查询性能。
安装与配置[编辑 | 编辑源代码]
系统要求[编辑 | 编辑源代码]
- Java 8 或更高版本
- 推荐至少 2GB 内存
- 足够的磁盘空间用于存储数据
安装步骤[编辑 | 编辑源代码]
# 下载 Elasticsearch (以 7.10.2 版本为例)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz
# 解压
tar -xzf elasticsearch-7.10.2-linux-x86_64.tar.gz
# 进入目录
cd elasticsearch-7.10.2/
# 启动 Elasticsearch (前台运行)
./bin/elasticsearch
基本配置[编辑 | 编辑源代码]
配置文件位于 config/elasticsearch.yml,常见配置项包括:
- cluster.name: 集群名称
- node.name: 节点名称
- network.host: 绑定地址
- http.port: HTTP 端口
- discovery.seed_hosts: 集群发现种子节点
基本操作[编辑 | 编辑源代码]
创建索引[编辑 | 编辑源代码]
curl -X PUT "localhost:9200/my_index?pretty" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
'
索引文档[编辑 | 编辑源代码]
curl -X POST "localhost:9200/my_index/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{
"title": "Elasticsearch 入门",
"author": "张三",
"content": "这是一篇关于 Elasticsearch 基础的文章",
"publish_date": "2023-01-01",
"tags": ["搜索", "数据库"]
}
'
搜索文档[编辑 | 编辑源代码]
curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"match": {
"content": "基础"
}
}
}
'
高级特性[编辑 | 编辑源代码]
聚合分析[编辑 | 编辑源代码]
Elasticsearch 提供强大的聚合功能,可用于数据分析:
curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
{
"aggs": {
"tags_agg": {
"terms": {
"field": "tags.keyword"
}
}
}
}
'
全文搜索[编辑 | 编辑源代码]
支持复杂的全文搜索查询,包括模糊匹配、短语匹配等:
curl -X GET "localhost:9200/my_index/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"multi_match": {
"query": "Elasticsearch 数据库",
"fields": ["title", "content"]
}
}
}
'
实际应用案例[编辑 | 编辑源代码]
日志分析[编辑 | 编辑源代码]
Elasticsearch 常与 Logstash 和 Kibana 组成 ELK 技术栈,用于日志收集、存储和分析。
电子商务搜索[编辑 | 编辑源代码]
许多电子商务平台使用 Elasticsearch 实现商品搜索、过滤和排序功能。
内容管理系统[编辑 | 编辑源代码]
为网站内容提供快速、相关的搜索体验。
性能优化[编辑 | 编辑源代码]
- 合理设置分片数量
- 使用合适的硬件配置
- 优化索引映射和设置
- 使用批量操作减少请求次数
- 定期监控集群健康状况
生态系统[编辑 | 编辑源代码]
Elasticsearch 与多个工具和技术集成良好:
版本历史[编辑 | 编辑源代码]
Elasticsearch 的主要版本发展历程:
- 2010年:首次发布
- 2014年:发布 1.0 版本
- 2016年:发布 5.0 版本
- 2017年:发布 6.0 版本
- 2019年:发布 7.0 版本
- 2021年:发布 8.0 版本
学习资源[编辑 | 编辑源代码]
- 官方文档
- Elasticsearch 权威指南(书籍)
- Elasticsearch 实战(书籍)