《一本书讲透Elasticsearch》读书笔记-索引

devtools/2024/10/21 13:38:00/

索引

定义

  • 索引是具有相同结构的文档的集合,由唯一索引名称标定,一个集群中有多个索引,不同的索引代表不同的业务类型数据

命名规范

  • 只能使用小写字母,不能使用大写字母
  • 不能包括“\”​“/”​“*”​“?”​“​“​”​“<”​“>”​“|”​“``”​“​,​”​“#”​“:”及空格等特殊符号
  • 不能以“-”​“_”​“+”作为开始字符
  • 不能命名为“.”或者“…
  • 不能超过255个字节
  • 不建议使用中文命名

创建索引

  • 定义索引不止限于名称,同时可以指定索引设置、索引映射、索引别名等
PUT hamlet-1
{"settings": {"number_of_shards": 2,"number_of_replicas": 1},"mappings": {"properties": {"cont":{"type":"text","analyzer": "ik_max_word","fields": {"field":{"type":"keyword"}}}}},"aliases": {"hamlet":{}}
}
  • 定义了一个名为hamlet-1的索引
  • 设定为拥有两个主分片以及一个副本分片
  • 设定了映射,此处设置了cont的字段类型为text,同时指定使用IK分词器进行中文分词,并对包含中文的属性指定了一个名为field的field类型属性为keyword的子属性。
  • 为hamlet-1索引设置了别名,即hamlet

索引设置

静态设置(static index settings)
  • 只允许在创建索引时或者针对已关闭的索引进行设置
指动态设置(dynamic index settings)
  • 可以借助更新设置(update settings)的方式进行动态更新,更新后立即生效

索引映射和别名

  • 字段名称
  • 字段类型
  • 分词器选择
  • 其他精准设置,如coerce、fielddata、doc_values等

索引操作

  • 索引的操作除了增、删、改、查外,还有reindex数据迁移等

新增/创建索引

put myindex
  • 详细定义索引设置、映射、别名
  • 只定义索引名,而settings、mappings取默认值

删除索引

  • 删除索引,物理删除,不可恢复
delete myindex
  • 清空数据, 逻辑删除
POST my_index/_delete_by_query
{"query": {"match_all": {}}
}
  • 如果存在删除全量数据,选择第一种
    • 方式一为物理删除,效率更高、更快;方式二为逻辑删除
    • 方式一立马能释放磁盘空间;方式二不会立即释放磁盘空间

修改索引

POST /_alises
{"actions": [{"add": {"index": "hamlet-1","alias": "new-hamlet"}},{"remove_index": {"index": "hamlet-1"}}]
}
  • 为已有索引添加别名
  • 动态更新索引的settings部分
  • 动态更新索引的部分mapping字段信息

查询索引

  • 获取名为myindex的索引的基础信息
GET myindex
  • 取的是在该索引下的数据的信息
GET myindex/_count
GET myindex/_search

索引别名

  • 定义: 索引别名可以指向一个或多个索引,并且可以在任何需要索引名称的API中使用
  • 作用
    • 在正在运行的集群上的一个索引和另一个索引之间进行透明切换
    • 对多个索引进行分组组合
    • 在索引中的文档子集上创建“视图”​,结合业务场景,缩小了检索范围,自然会提升检索效率
  • 常见问题
    • 使用别名插入数据
      • 默认不允许插入数据
      • 如果要实现则需要设置:is_write_index设置为ture,即可使用该别名插入数据
    • 使用别名和基于索引的检索效率一样吗?
      • 一样,因为索引别名只是物理索引的软链接的名称而已
  • 注意
    • 对相同索引别名的物理索引建议有一致的映射,以提升检索效率
    • 推荐充分发挥索引别名在检索方面的优势,但在写入和更新时还得使用物理索引

索引模板

定义

  • 7.8及之后版本支持两种定义模板的方式
    • 普通模板定义方式
    • 组件模板新增/创建方式

操作

  • 修改/新增/创建模板PUT _index_template/template_1
  • 删除模板DELETE _index_template/template_1
  • 查询模板GET _index_template/template_1

动态模板实战

  • 在企业级实战中不确定字段名称、不确定字段类型的场景下,借助动态模板来灵活设置字段就显得尤为必要

常见问题

  • 模板和索引在应用上的区别是什么?

    • 索引针对的是单一索引,类似MySQL中的一个表
    • 模板针对一个或多个索引,或者说是针对具有相同表结构的一类索引
  • 如果想更新映射,那么可以通过更新模板来实现吗?

    • 一旦创建了映射,除几个特定的类型以外,其他类型都不支持更新,除非进行reindex操作
    • 更新模板仅适用于新创建的索引
    • 更新为动态模板仅会影响索引中的新字段
    • 模板是一个很高效的工具,可全局设置多个索引且批量生效,避免不必要的重复工作

http://www.ppmy.cn/devtools/121448.html

相关文章

Git的安装 + 基本操作

一、Git初识 1. 提出问题 ​ 不知道你在工作或学习中,有没有遇到这样的情况:我们在创建并编写各种文档时,为了防止文档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出一个一个的副本,保…

部分监督多器官医学图像分割中的标记与未标记分布对齐|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割

Title 题目 Labeled-to-unlabeled distribution alignment for partially-supervised multi-organ medical image segmentation 部分监督多器官医学图像分割中的标记与未标记分布对齐 01 文献速递介绍 多器官医学图像分割(Mo-MedISeg)是医学图像分析…

二、MySQL的数据目录

文章目录 1. MySQL8的主要目录结构1.1 数据库文件的存放路径1.2 相关命令目录1.3 配置文件目录 2. 数据库和文件系统的关系2.1 查看默认数据库2.2 数据库在文件系统中的表示2.3 表在文件系统中的表示2.3.1 InnoDB存储引擎模式2.3.2 MyISAM存储引擎模式 2.4 小结 1. MySQL8的主要…

【QT Quick】基础语法:导入外部JS文件及调试

在 QML 中,可以使用 JavaScript 来实现业务逻辑的灵活性和简化开发。接下来我们会学习如何导入 JavaScript 文件,并在 QML 中使用它,同时也会介绍如何调试这些 JavaScript 代码。 导入 JavaScript 文件 在 QML 中导入 JavaScript 文件的方式…

漫谈前端:2025年框架是该选vue还是react?

相信很多前端小伙伴都有过纠结的时候,开始一个项目的时候是该选vue还是react。很多情况下,都是根据团队现有框架延续,或者是自身数量度。渐渐的公司组件和规范全基于某一种框架,虽然很爽但Allin难掉头。本文就浅浅的比较下vue和re…

YOLO11改进|卷积篇|RFAConv创新空间注意力和标准卷积操作

目录 一、RFAConv卷积1.1RFAConv卷积介绍1.2RFAConv核心代码 五、添加RFAConv卷积5.1STEP15.2STEP25.3STEP35.4STEP4 六、yaml文件与运行6.1yaml文件6.2运行成功截图 一、RFAConv卷积 1.1RFAConv卷积介绍 RFAConv卷积操作提出了一种融合了空间注意力机制和标准卷积操作的新型卷…

【音视频开发】使用支持硬件加速的D3D11绘图遇到的绘图失败与绘图崩溃问题的记录与总结

目录 1、使用D3D_DRIVER_TYPE_HARDWARE GPU硬件加速模式遇到的崩溃问题 2、使用D3D_DRIVER_TYPE_HARDWARE模式,出现了绘图失败的问题 3、将D3D_DRIVER_TYPE_HARDWARE模式改成D3D_DRIVER_TYPE_WARP模式,但出现了绘图失败的问题 4、解决办法 对视频进行…

【IPv6】IPv6地址格式及地址分类(组播、单播、任播)整理

IPv6地址格式 IPv6 地址从 IPv4 地址的 32 bits 扩展到 128 bits,IPv6 地址的表示、书写方式也从 IPv4 的点分十进制,修改16进制的冒号分割 IPv4 点分格式(.) 192.168.11.11 IPv6 冒号分割(:) 2408:8459:3032:0000:0000:0000:0001:a9fd IPv6 的规范…