Elasticsearch 一书在手--索引
最编程
2024-10-02 07:31:18
...
索引
定义
- 索引是具有相同结构的文档的集合,由唯一索引名称标定,一个集群中有多个索引,不同的索引代表不同的业务类型数据
命名规范
- 只能使用小写字母,不能使用大写字母
- 不能包括“\”“/”“*”“?”““”“<”“>”“|”“``”“,”“#”“:”及空格等特殊符号
- 不能以“-”“_”“+”作为开始字符
- 不能命名为“.”或者“…
- 不能超过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操作
- 更新模板仅适用于新创建的索引
- 更新为动态模板仅会影响索引中的新字段
- 模板是一个很高效的工具,可全局设置多个索引且批量生效,避免不必要的重复工作
上一篇: 828 华为云论文|华为云 X 实例 CPU 性能测试与优化策略
下一篇: C++ - 类型转换
推荐阅读
-
Elasticsearch 一书在手--索引
-
在 Elasticsearch 中更改索引 - 2.重新索引数据
-
Elasticsearch:一款强大的分布式搜索引擎
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
深入了解 Elasticsearch 8.X 索引模板:从传统模板到可组合模板的全面指南
-
elasticSearch的索引库文档的增删改查
-
腾讯云 Elasticsearch 集群运维常用命令详解三(索引篇)
-
ElasticSearch 最完整、最详细的使用教程:入门、索引管理、映射详情
-
Elasticsearch 索引父子关系(索引父子关系)
-
使用阿里云试用 Elasticsearch 学习:1.7 基本入门 - 索引管理