Elasticsearch 概念与基础实操 (索引、映射与文档操作)(黑马微服务课day12)

Elasticsearch 概念与基础实操 (索引、映射与文档操作)

在海量数据的搜索与分析场景中,Elasticsearch (简称 ES) 凭借其分布式、高扩展和近实时的搜索特性,成为了众多开发者的首选。因此了解es的使用的原理和操作必不可少
Rabbit高级篇的总结内容:RabbitMQ高级篇总结

Rabbit入门篇的总结内容:Rabbit入门篇总结

📚 目录(点击跳转对应章节)

[1. 核心概念:正向索引与倒排索引](#1. 核心概念:正向索引与倒排索引)
[2. 中文分词利器:IK 分词器](#2. 中文分词利器:IK 分词器)
[3. ES 与 MySQL 概念对比](#3. ES 与 MySQL 概念对比)
[4. Mapping 映射属性](#4. Mapping 映射属性)
[5. 索引库操作 (Index CRUD)](#5. 索引库操作 (Index CRUD))
[6. 文档操作 (Document CRUD)](#6. 文档操作 (Document CRUD))


1. 核心概念:正向索引与倒排索引

理解 ES 的高效查询,首先要理解它的索引机制。

  • 正向索引 :类似传统关系型数据库的主键查询,通过 ID 找内容。如果是模糊查询(如 LIKE),需要全表扫描,效率极低。
  • 倒排索引 :ES 搜索的核心。它将文档内容进行分词 ,提取出词条(Term),并记录该词条所在的文档 ID 列表。搜索时,先对关键词分词,再去词条列表中快速定位文档 ID,最后根据 ID 获取文档。这种方式极大地提高了全文检索的速度。

小结


2. 中文分词利器:IK 分词器

倒排索引依赖于分词,而 ES 默认的标准分词器对中文支持很不友好(会将中文逐字切分)。在实际项目中,我们通常会接入 IK 分词器。

IK 分词器提供两种常用的分词模式:

  • ik_smart :最少切分,追求粗粒度的精准。

  • ik_max_word :最细切分,穷尽词库的可能,适合搜索场景。

    拓展分词词库中的词条:


3. ES 与 MySQL 概念对比

为了方便具备关系型数据库背景的开发者理解,我们可以将 ES 的概念与 MySQL 进行类比:

  • MySQL:数据库 (Database) -> 表 (Table) -> 行 (Row) -> 列 (Column)
  • Elasticsearch :索引库 (Index) -> 类型 (Type,ES 7.x 之后已废弃,默认 _doc) -> 文档 (Document) -> 字段 (Field)

此外,ES 的 Mapping 映射就相当于 MySQL 中的表结构定义(Schema)。


4. Mapping 映射属性

Mapping 是对索引库中整篇文档及其包含字段的结构定义。常见的数据类型包括:

  • 字符串text (可分词的文本)、keyword (精确值,如品牌、邮箱,不分词)
  • 数值long, integer, short, byte, double, float
  • 布尔boolean
  • 日期date
  • 对象object (JSON 嵌套)

核心注意 :只有 text 类型的字段需要进行分词,并可以配置 analyzer 属性。

具体实例:


5. 索引库操作 (Index CRUD)

RESTful API 风格贯穿了整个 ES 操作。对于索引库的操作,核心原则是:一旦创建,无法修改已有的 Mapping 字段(因为这会导致原有倒排索引失效),但可以新增字段。

5.1 创建索引库和映射

使用 PUT 请求,明确表达"创建或覆盖"的语义。

json 复制代码
PUT /heima
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type": "keyword",
        "index": false
      },
      "name":{
        "properties": {
          "firstName": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

5.2 查询索引库

使用 GET 请求。

http 复制代码
GET /heima

5.3 修改索引库 (仅限新增字段)

使用 PUT 向已有的 mapping 中追加新字段。

json 复制代码
PUT /heima/_mapping
{
  "properties": {
    "age":{
      "type": "integer"
    }
  }
}

倒排索引结构虽然不复杂,但是一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引,这简直是灾难。因此索引库一旦创建,无法修改mapping
虽然无法修改mapping中已有的字段,但是却允许添加新的字段到mapping中,因为不会对倒排索引产生影响。因此修改索引库能做的就是向索引库中添加新字段,或者更新索引库的基础属性。

5.4 删除索引库

使用 DELETE 请求。

http 复制代码
DELETE /heima

6. 文档操作 (Document CRUD)

对具体数据的增删改查同样遵循 RESTful 原则。

6.1 新增文档

使用 POST 请求,并指定索引库、_doc 以及文档 ID。

json 复制代码
POST /heima/_doc/1
{
    "info": "黑马程序员Java讲师",
    "email": "zy@itcast.cn",
    "name": {
        "firstName": "云",
        "lastName": "赵"
    }
}

6.2 查询文档

使用 GET 请求加文档 ID。

json 复制代码
GET /heima/_doc/1

6.3 删除文档

使用 DELETE 请求加文档 ID。

json 复制代码
DELETE /heima/_doc/1

6.4 修改文档

ES 的修改分为全量修改和局部修改:

全量修改 (PUT):底层逻辑是先根据 ID 删除旧文档,再新增同 ID 文档。如果原 ID 不存在,则直接变为新增操作。

json 复制代码
PUT /heima/_doc/1
{
    "info": "黑马程序员高级Java讲师",
    "email": "zy@itcast.cn",
    "name": {
        "firstName": "云",
        "lastName": "赵"
    }
}

局部修改 (POST + _update):仅修改指定的字段值。

json 复制代码
POST /heima/_update/1
{
  "doc": {
    "email": "ZhaoYun@itcast.cn"
  }
}

6.5 批处理 (Bulk)

在处理大量数据时,使用 _bulk 接口可以极大提高网络吞吐量。批处理的内容格式比较特殊,每一组操作由两行 JSON 组成(操作类型与元数据 + 操作的实际数据)。

批量新增示例

json 复制代码
POST /_bulk
{"index": {"_index":"heima", "_id": "3"}}
{"info": "黑马程序员C++讲师", "email": "ww@itcast.cn", "name":{"firstName": "五", "lastName":"王"}}
{"index": {"_index":"heima", "_id": "4"}}
{"info": "黑马程序员前端讲师", "email": "zhangsan@itcast.cn", "name":{"firstName": "三", "lastName":"张"}}

批量删除示例

json 复制代码
POST /_bulk
{"delete":{"_index":"heima", "_id": "3"}}
{"delete":{"_index":"heima", "_id": "4"}}
相关推荐
海兰2 小时前
Elasticsearch Mapping 解析
大数据·elasticsearch·搜索引擎
海兰2 小时前
Elasticsearch 自管理集群配置指南
大数据·elasticsearch·jenkins
MARS_AI_2 小时前
2026年大模型呼叫厂商深度盘点:8家核心玩家及选型指南
大数据·人工智能·自然语言处理·交互·信息与通信
海兰2 小时前
Elasticsearch 全文检索概述
elasticsearch·serverless·全文检索
YangYang9YangYan2 小时前
2026大专大数据与会计专业学习数据分析的价值分析
大数据·学习·数据分析
海兰2 小时前
Elasticsearch 搜索方案与技术栈深度解析
大数据·elasticsearch·django
Coder_Boy_2 小时前
从单体并发工具类到分布式并发:思想演进与最佳实践
java·spring boot·分布式·微服务
良策金宝AI10 小时前
让端子排接线图“智能生成”,良策金宝AI推出变电站二次智能设计引擎
大数据·人工智能·工程设计·变电站ai
a2852811 小时前
nginx的重定向
大数据·数据库·nginx