Elasticsearch

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 系统)
  1. 下载 ES 7.17.0 安装包(官网:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-0);
  2. 解压后修改 config/elasticsearch.yml,添加跨域配置(方便 Kibana 连接):

    yaml

    http.cors.enabled: true
    http.cors.allow-origin: "*"
    
  3. 双击 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"
    }
    
  4. 安装 Kibana(与 ES 同版本),修改 config/kibana.yml 配置 ES 地址:

    yaml

    elasticsearch.hosts: ["http://localhost:9200"]
    i18n.locale: "zh-CN" # 中文汉化
    
  5. 启动 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. 工作落地计划
  1. 下周在测试环境搭建 ES 单机版,导入部分底稿测试数据,验证全文检索效果;
  2. 结合项目需求,开发 “底稿文档检索功能”(支持关键词搜索、多条件筛选);
  3. 后续将系统操作日志接入 ES,实现日志实时检索与异常统计,提升问题排查效率。

六、疑问与待解决问题

  1. 如何处理 ES 与 MySQL 数据一致性问题?(计划学习 Canal 同步 binlog 实现实时同步);
  2. 金融行业数据敏感,ES 如何配置权限控制(如不同经销商只能查看自己的底稿)?
  3. 大数据量(百万级文档)下,如何优化检索速度?(后续重点学习分片优化与查询缓存)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值