| Elasticsearch 概念 | MySQL 概念 | 通俗解释 | 学习重点 |
|---|---|---|---|
| Index(索引) | Database(数据库) | 存储同一类数据的集合(如 “底稿文档索引”“系统日志索引”) | 索引创建时需指定分片、副本数(单机版默认 5 分片 1 副本) |
| Type(类型) | Table(表) | 索引下的逻辑分类(ES 7.x 后已废弃,一个索引仅支持一种 Type:_doc) | 无需额外定义 Type,专注索引结构设计即可 |
| Document(文档) | Row(行) | 索引中的单条数据,以 JSON 格式存储 | 文档自带 _id(唯一标识),支持自定义或自动生成 |
| Field(字段) | Column(列) | 文档中的属性(如底稿的 id、名称、创建时间、内容) | 需指定字段类型(text 支持全文检索,keyword 支持精确匹配) |
| Mapping(映射) | Table Schema(表结构) | 定义文档字段的类型、分词器等规则 | 核心:区分 text(全文检索)和 keyword(精确查询),避免检索失效 |
| Shard(分片) | - | 索引的物理拆分,分布式存储核心 | 单机版无需调整,集群版需规划分片数量(一旦创建不可修改) |
| Replica(副本) | - | 分片的备份,用于高可用和负载均衡 | 单机版可设为 1 副本(测试环境),生产环境建议 1-2 副本 |
关键认知突破:ES 是「搜索引擎」而非传统数据库,核心优势在「全文检索」和「近实时查询」,而非事务一致性(需配合 MySQL 等数据库做数据同步)。
三、环境搭建过程(踩坑记录)
1. 安装步骤(Windows 系统)
- 下载 ES 7.17.0 安装包(官网:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-0);
- 解压后修改 config/elasticsearch.yml,添加跨域配置(方便 Kibana 连接):
yaml
http.cors.enabled: true http.cors.allow-origin: "*" - 双击 bin/elasticsearch.bat 启动,访问 http://localhost:9200 验证,返回如下信息说明启动成功:
json
{ "name" : "DESKTOP-XXX", "cluster_name" : "elasticsearch", "version" : { "number" : "7.17.0", "build_flavor" : "default", "build_type" : "zip" }, "tagline" : "You Know, for Search" } - 安装 Kibana(与 ES 同版本),修改 config/kibana.yml 配置 ES 地址:
yaml
elasticsearch.hosts: ["http://localhost:9200"] i18n.locale: "zh-CN" # 中文汉化 - 启动 Kibana(bin/kibana.bat),访问 http://localhost:5601 进入可视化界面,使用 Dev Tools 调试接口。

2. 常见踩坑
- 报错「Java_HOME 未配置」:需手动设置 JDK 环境变量(ES 7.x 依赖 JDK 1.8+,无需额外安装,ES 内置 JDK 可在 config/jvm.options 中指定);
- 启动失败(端口占用):默认 9200(ES)、5601(Kibana),可在 yml 文件中修改端口(如 http.port: 9201);
- Kibana 连接 ES 失败:检查 ES 跨域配置是否正确,且 ES 已正常启动。
四、核心操作实战(RESTful API + 业务场景落地)
以「金融底稿文档索引」为例,所有操作通过 Kibana Dev Tools 执行,API 格式统一为:请求方式 + 索引名/类型/文档ID。
1. 索引操作(对应 MySQL 建库 + 建表)
(1)创建索引(指定 Mapping)
http
PUT /document_index
{
"mappings": {
"properties": {
"doc_id": { "type": "keyword" }, // 底稿ID(精确匹配,如查询某一特定底稿)
"doc_name": { "type": "text", "analyzer": "ik_max_word" }, // 底稿名称(全文检索,分词)
"dealer_name": { "type": "keyword" }, // 经销商名称(精确匹配+聚合统计)
"create_time": { "type": "date", "format": "yyyy-MM-dd HH:mm:ss" }, // 创建时间(范围查询)
"doc_content": { "type": "text", "analyzer": "ik_max_word" }, // 底稿内容(全文检索)
"status": { "type": "integer" } // 状态(1-未审核,2-已审核)
}
}
}
- 关键:使用「IK 分词器」(需额外安装,支持中文分词),否则中文会被拆分为单个字,检索效果差;
- 字段类型选择逻辑:需要全文检索用 text,需要精确匹配 / 聚合 / 排序用 keyword。
(2)查看索引结构
http
GET /document_index/_mapping
(3)删除索引
http
DELETE /document_index
2. 文档操作(对应 MySQL 增删改查)
(1)新增文档(自动生成 _id)
http
POST /document_index/_doc
{
"doc_id": "DOC2025001",
"doc_name": "宝马经销商2025年融资立项底稿",
"dealer_name": "南京某宝马经销商集团",
"create_time": "2025-01-10 14:30:00",
"doc_content": "该经销商集团2025年计划融资5000万,用于门店扩张和设备升级,尽职调查已完成",
"status": 2
}
(2)查询文档(按 _id 查询)
http
GET /document_index/_doc/1?_source=doc_name,dealer_name,status
- _source 参数:指定返回字段,减少数据传输。
(3)更新文档(全量更新 / 部分更新)
- 部分更新(推荐,仅修改指定字段):
http
POST /document_index/_doc/1/_update
{
"doc": {
"status": 1,
"create_time": "2025-01-10 15:00:00"
}
}
(4)删除文档
http
DELETE /document_index/_doc/1
3. 检索操作(ES 核心优势)
(1)全文检索(匹配底稿名称或内容含 “融资”)
http
GET /document_index/_search
{
"query": {
"multi_match": {
"query": "融资",
"fields": ["doc_name", "doc_content"] // 多字段检索
}
}
}
(2)精确匹配(查询经销商为 “南京某宝马经销商集团” 且状态为 2 的底稿)
http
GET /document_index/_search
{
"query": {
"bool": {
"must": [
{ "term": { "dealer_name": "南京某宝马经销商集团" } },
{ "term": { "status": 2 } }
]
}
}
}
- term 查询:用于 keyword 或数值类型字段的精确匹配,不分词。
(3)范围查询(查询 2025 年 1 月 1 日后创建的底稿)
http
GET /document_index/_search
{
"query": {
"range": {
"create_time": {
"gte": "2025-01-01 00:00:00",
"lte": "2025-01-31 23:59:59",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
},
"sort": [{"create_time": "desc"}] // 按创建时间倒序
}
(4)聚合分析(统计各经销商的底稿数量)
http
GET /document_index/_search
{
"size": 0, // 不返回文档详情,仅返回聚合结果
"aggs": {
"dealer_doc_count": {
"terms": { "field": "dealer_name", "size": 10 } // 按经销商分组统计
}
}
}
- 应用场景:快速统计各经销商的底稿提交数量,适配工作中的数据报表需求。
五、学习总结与后续规划
1. 入门阶段收获
- 掌握 ES 核心概念与 MySQL 的对应关系,快速建立认知;
- 能独立搭建 ES + Kibana 环境,解决常见启动问题;
- 熟练使用 RESTful API 完成索引、文档的 CRUD 及基础检索,可落地到工作中的简单检索场景(如日志查询、底稿关键词搜索)。
2. 待深入学习内容
- 分词器深入:IK 分词器自定义词典(适配金融行业专有词汇,如 “底稿”“尽职调查”);
- 高级查询:模糊查询、前缀查询、高亮显示(优化检索结果展示);
- 数据同步:学习 Logstash 或 Canal,实现 MySQL 数据向 ES 同步(工作中底稿数据实时同步需求);
- 性能优化:索引分片规划、查询语句优化、缓存配置(应对大数据量场景);
- 集群部署:了解 ES 集群架构、节点角色(master/data/client),适配生产环境高可用需求。
3. 工作落地计划
- 下周在测试环境搭建 ES 单机版,导入部分底稿测试数据,验证全文检索效果;
- 结合项目需求,开发 “底稿文档检索功能”(支持关键词搜索、多条件筛选);
- 后续将系统操作日志接入 ES,实现日志实时检索与异常统计,提升问题排查效率。
六、疑问与待解决问题
- 如何处理 ES 与 MySQL 数据一致性问题?(计划学习 Canal 同步 binlog 实现实时同步);
- 金融行业数据敏感,ES 如何配置权限控制(如不同经销商只能查看自己的底稿)?
- 大数据量(百万级文档)下,如何优化检索速度?(后续重点学习分片优化与查询缓存)。
2282

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



