Elasticsearch学习之路
Elasticsearch 不仅仅是一个搜索引擎,更是一个强大的分布式数据分析引擎。
阶段一:入门 - 理解核心,搭建环境
这个阶段的目标是理解 Elasticsearch 是什么,能做什么,并成功运行起来。
1. 核心概念理解
-
是什么? Elasticsearch 是一个基于 Lucene 构建的、开源的、分布式、RESTful 的搜索和分析引擎。
-
核心概念类比(与数据库对比):
| Elasticsearch | 传统关系型数据库 (MySQL) | 说明 |
|---|---|---|
| 索引 | Database | 一类数据的集合,是最高层级。 |
| 文档 | Row | 一条具体的数据,是基本存储单元。 |
| 字段 | Column | 文档的属性。 |
| 映射 | Schema | 定义字段的数据类型(如 text, keyword, integer)。 |
| 类型 | Table | 注意:在 7.x 之后版本中已被弃用,一个索引默认只包含一个 _doc 类型。 |
-
分布式特性:
-
节点: 一个运行的 ES 实例。
-
集群: 由一个或多个节点组成。
-
分片: 索引可以被分成多个分片,分布到不同节点上。这是实现分布式和水平扩展的核心。
-
主分片: 负责数据的读写。
-
副本分片: 主分片的拷贝,提供高可用性和提升读性能。
-
-
2. 安装与运行
-
安装 Elasticsearch:
-
直接下载: 从 官网 下载,解压运行
./bin/elasticsearch。 -
使用 Docker(推荐,方便快捷):
bash
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "xpack.security.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:8.10.2
-
-p 9200:9200: HTTP API 端口。 -
-p 9300:9300: 节点间通信端口。 -
discovery.type=single-node: 单节点模式,适合学习。 -
xpack.security.enabled=false: 禁用安全认证,方便测试。
-
-
验证安装:
浏览器访问http://localhost:9200,你会看到一个包含集群信息的 JSON。 -
安装 Kibana(强烈推荐):
Kibana 是 ES 的数据可视化和管理工具。bash
docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 docker.elastic.co/kibana/kibana:8.10.2
访问
http://localhost:5601即可打开 Kibana 界面。
3. 第一个 CRUD 操作
使用 Kibana 的 Dev Tools 控制台进行操作,它提供了非常方便的界面来编写 REST API 请求。
-
创建索引:
json
PUT /my-first-index
-
插入文档(指定 ID):
json
PUT /my-first-index/_doc/1 { "title": "Hello Elasticsearch", "content": "This is my first document.", "tags": ["tech", "search"], "created_at": "2023-10-01" } -
查询文档:
json
GET /my-first-index/_doc/1
-
更新文档:
json
POST /my-first-index/_update/1 { "doc": { "content": "This is my updated first document." } } -
删除文档:
json
DELETE /my-first-index/_doc/1
-
搜索文档(
_searchAPI):json
GET /my-first-index/_search { "query": { "match": { "content": "updated" } } }
阶段二:进阶 - 掌握搜索、聚合与映射
这个阶段的目标是能够熟练使用 ES 进行复杂查询和数据分析。
1. 查询 DSL
Elasticsearch 使用基于 JSON 的 DSL 进行查询。
-
基本查询类型:
-
match: 全文检索,会对查询词进行分词。 -
term: 精确匹配,不对查询词进行分词,直接匹配字段的精确值。 -
range: 范围查询(gt, gte, lt, lte)。 -
bool: 组合查询(must AND, should OR, must_not NOT)。json
GET /my-first-index/_search { "query": { "bool": { "must": [ { "match": { "content": "document" } } ], "must_not": [ { "term": { "tags": "beginner" } } ] } } }
-
2. 聚合分析
聚合提供了分组和提取统计信息的能力,类似于 SQL 的 GROUP BY 和聚合函数。
-
指标聚合: 如
avg,sum,min,max,value_count。 -
桶聚合: 将文档分组到不同的桶中。
-
terms: 按字段值分组。 -
date_histogram: 按时间间隔分组。 -
range: 按数值范围分组。
-
示例:统计每个标签下的文档数量
json
GET /my-first-index/_search
{
"size": 0, // 不返回原始命中结果
"aggs": {
"tags_agg": {
"terms": {
"field": "tags.keyword", // 注意:对于分词的text字段,通常使用.keyword子字段
"size": 10
}
}
}
}
3. 映射与分词
-
映射: 定义字段的类型和属性,至关重要!
-
核心类型:
text(会分词),keyword(不分词,用于精确匹配和聚合),long,integer,date,boolean,object,nested。 -
查看映射:
GET /my-index/_mapping
-
-
分词器: 将文本转换为倒排索引中的词条。
-
标准分词器: 默认选择。
-
IK 分词器: 中文分词的必备插件。你需要安装并配置它来处理中文。
-
阶段三:精通 - 集群管理、性能调优与生态集成
这个阶段的目标是深入理解分布式原理,并能处理生产环境中的问题。
1. 集群管理与监控
-
查看集群健康状态:
GET _cluster/health -
查看节点信息:
GET _cat/nodes?v -
查看分片分配:
GET _cat/shards?v -
使用 Kibana 的 Monitoring 功能: 可视化监控集群性能指标。
2. 性能调优
-
索引设计:
-
合理设置主分片数量(一旦创建不能修改)。
-
合理设置副本数量(可以动态调整)。
-
-
映射优化:
-
明确字段类型,避免动态映射。
-
对于不需要搜索的字段,使用
"index": false。 -
合理使用
keyword和text。
-
-
查询优化:
-
避免深度分页(使用
search_after)。 -
使用
filter上下文缓存结果,提升查询速度。 -
只返回需要的字段(
_sourcefiltering)。
-
3. 生态集成
-
Logstash: 数据采集、转换和导入到 ES 的管道。构成 ELK Stack。
-
Beats: 轻量级数据采集器(如 Filebeat 用于日志文件,Metricbeat 用于系统指标)。
-
Ingest Node: ES 节点自身的数据预处理管道,可以在索引前对文档进行加工。
原文地址:https://blog.csdn.net/pan303507479/article/details/154336590
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!
