• ElasticSearch8 - 基础概念和映射


    前言

    写这篇东西,是因为官方文档看着太痛苦,于是乎想用大白话来聊聊 ElasticSearc (下面都简称ES)。所以下文对于 ES 一些概念的表述可能会与官方有出入,所以需要准确的表述和详细定义的,请跳转官方文档。我也尽量贴上官方的链接。

    前置知识:因为下文会使用 mysql 的一些概念来描述,所以没学过的不建议看文本。

    本文基于 ES 8.12

    ES 基础概念

    ES 是一个搜索引擎。重点是大数据搜索,如果是传统的 CRUD,请考虑关系型数据库。

    下面来了解几个 ES 的基础概念

    索引(index)

    Index modules | Elasticsearch Guide [8.12] | Elastic

    类比 mysql 的表,但又与表有很大区别

    mysql:创建表需要先定义表字段,再进行数据插入。并且如果添加新字段,需要先修改表结构,再进行数据插入。

    ES:索引无需预先定义字段(ES 里面叫映射),可在插入数据时动态添加字段(这叫动态映射,后面讲)

    文档类型(type)

    ES7 开始,文档类型只有默认的 _doc 了,我没用过旧版,所以略...

    文档(document)

    类比 mysql 的表的一条数据。

    映射(mapping)

    Mapping | Elasticsearch Guide [8.12] | Elastic

    类比 mysql 的表字段,不同类型的字段,存储和查找会有区别

    查看索引的映射

    -- 查看映射(索引名为 my-index 的映射)
    GET /my-index/_mappings
    -- 查看映射的某个字段(索引名为 my-index 的字段 age 的映射)
    GET /my-index/_mapping/field/age

    动态映射

    Dynamic field mapping | Elasticsearch Guide [8.12] | Elastic

    ES 与传统关系型数据库不同,创建索引(类比 mysql 的表)时,不需要指定字段,在插入数据时,会自动创建字段和判断字段的类型,这就是动态映射。

    动态映射默认的开启的,可以通过 dynamic 参数来修改。dynamic | Elasticsearch Guide [8.12] | Elastic

    以下是不同 dynamic 参数对 json 数据类型的映射

    JSON 数据类型 dynamic: true dynamic: runtime
    null No field added No field added
    true or false boolean boolean
    double float float
    long long long
    object object No field added
    array 取决于数组中的第一个非 null 值 取决于数组中的第一个非 null 值
    日期类型的 string date date
    数字类型的 string float or long double or long
    其他类型的 string text with a .keyword sub-field keyword

    注意:默认的数字检测是关闭的,也就是在 没有映射 的情况下,插入 666 字符串是识别的成字符串的。如果已经配置了映射字段是 long 类型,插入 666 字符串才会被识别为数字

    日期检测:
    默认的日期检测格式有 yyyy/MM/dd HH:mm:ss||yyyy/MM/dd
    也就是 2024/01/01 12:00:00 或者 2024/01/01 ,但是 2024-01-01 格式也行, 2024-01-01 12:00:00 不可以

    自定义日期检测

    PUT my-index
    {
    "mappings": {
    "dynamic_date_formats": [ "yyyy/MM", "MM/dd/yyyy"]
    // 或者用
    "dynamic_date_formats": [ "yyyy/MM|MM/dd/yyyy"]
    }
    }

    两者的区别在于,[ "yyyy/MM", "MM/dd/yyyy"] 第一次插入数据,匹配到哪种,以后都用这种检测。而 [ "yyyy/MM|MM/dd/yyyy"] 则是两种格式都能用

    显式映射

    创建索引时添加映射

    不需要搜索的字段,建议用 index: false 属性
    index | Elasticsearch Guide [8.12] | Elastic

    PUT /my-index
    {
    "mappings": {
    "properties": {
    "age": { "type": "integer" },
    "email": { "type": "keyword" , "index": false },
    "name": { "type": "text" }
    }
    }
    }

    向现有映射添加字段

    PUT /my-index/_mapping
    {
    "properties": {
    "employee-id": {
    "type": "keyword",
    "index": false
    }
    }
    }

    修改现有映射

    除了支持的映射参数外,您不能更改现有字段的映射或字段类型。更改现有字段可能会使已索引的数据无效。

    如果需要更改字段的映射,请使用正确的映射创建一个新索引,并将数据重新索引到该索引中。

    说人话就是:ES 是用来搜索的,官方不建议修改字段映射。不比关系数据库,ES 更改字段的映射很麻烦,跟重新建一个索引把数据导进去差不多(官方也建议这么玩)

    总结

    本文用大白话讲了 ES 的几个基本概念和映射的操作,旨在让小白能快速了解 ES,如果文章有错误的地方,欢迎评论区指出。

    参考资料

    Elasticsearch Mapping类型修改 - 知乎 (zhihu.com)

  • 相关阅读:
    springboot基于JAVA的学员代言人评选投票系统设计与实现毕业设计源码161825
    【LeetCode刷题】-- 50.Pow(x,n)
    论文翻译:2022_DeepFilterNet2: Towards Real-Time Speech Enhancement On Embedded Devices For Fullband Audio
    css:html元素的定位
    一次内存泄露排查小结
    AUTOSAR 面试知识回顾
    产品新闻稿撰写流程是怎样的,纯干货
    RabbitMQ发布确认高级
    Git 和 Github 的使用
    vue插槽slot用法
  • 原文地址:https://www.cnblogs.com/konghuanxi/p/18082114