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

索引

定义

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

命名规范

  • 只能使用小写字母,不能使用大写字母
  • 不能包括“\”​“/”​“*”​“?”​“​“​”​“<”​“>”​“|”​“``”​“​,​”​“#”​“:”及空格等特殊符号
  • 不能以“-”​“_”​“+”作为开始字符
  • 不能命名为“.”或者“…
  • 不能超过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操作
    • 更新模板仅适用于新创建的索引
    • 更新为动态模板仅会影响索引中的新字段
    • 模板是一个很高效的工具,可全局设置多个索引且批量生效,避免不必要的重复工作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值