当前位置:   article > 正文

设置Elasticsearch索引_elasticsearch 实体类配置索引

elasticsearch 实体类配置索引

索引

索引(Index)是个虚拟表空间,类型数据库中的table,
一个索引由至少1个分片组成,
一个索引由可以由主分片与福分片组成。

索引别名

索引是虚拟表空间,索引别名则是在索引之上又一层虚拟的索引空间。
索引别名默认等同于索引名称
用途:
索引重建之后快速切换,应用无感知。

索引命名

命名规范建议:
业务类型:索引名+数字版本
如:article_001,video_001
日志类型:索引名+日期时间
如:system-log-2022.05.01
应用意义:
数据隔离
查询便利
模糊匹配
精确指定索引

索引创建

动态创建
索引无需提前创建,第一条数据插入即可常见完成。
应用场景:非严格数据模型限制的场景,如日志、监控。
索引模板:通常采用索引模板固定下来。
可限制自动机制:限制索引名称、限制索引自动创建。

POST /edu_001/_doc
{
    "name": "zhangsan"
}
  • 1
  • 2
  • 3
  • 4

动态创建

依据客观背景提前创建索引,提前做好索引数据分布与相应设置
应用场景:
业务系统数据需要严格规范
索引分布在极端情况下需要消耗集群资源,避免集中创建索引时,集群响应慢。
PUT index-002
{
}

滚动创建/自动创建

rollover特性

利用了别名alias
利用rollover特性
自动化滚动创建,达到一定阈值创建。
应用场景:
日志领域,需要自动化依据触发条件滚动创建。
大数据领域,单索引能力局限需要创建很多。

// 创建索引并带索引
PUT index-03
{
    "aliases": {"index-03-alias": {}}
}
// 获取meta元数据信息,包括别名
GET index-03
//也可以用:
GET index-03-alias
// 绑定别名
PUT index-03/_alias/index03-alias1
// 别名跟索引是多对多的关系。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

滚动索引创建命名规范

1、索引命名规范,必须符合自动增长模式
2、建议后缀是标准数字
3、索引名称中不要有特殊符号

# 语法1
POST /<rollover-target>/_rollover/<target-index>
# 语法2
POST /<rollover-target>/_rollover/
# 案例1:滚动创建跟别名有关系
# 指定别名
PUT index-rollover-index-000001
{
  "aliases": {"index-rollover-index"}
}
# 查看别名
GET index-rollover-index
# 触发滚动
POST index-rollover-index/_rollover
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

滚动索引触发条件

1、索引最大文档书
2、索引创建时间
3、索引最大空间

# 设置触发条件
POST index-rollover-index/_rollover
{
    "conditions": {"max_docs": 2}
}
# 增加数据,用来触发条件(记得刷新refresh)
POST index-rollover-index-000001/_doc?refresh
{
    "test": "abc"
}
# 也可以指定索引index-rollover-index-000006
POST index-rollover-index/_rollover/index-rollover-index-000006
{
    "conditions": {"max_docs": 2}
}
# dry_run模拟触发,不真正触发
POST index-rollover-index/_rollover?dry_run
{
    "conditions": {"max_docs": 2, "max_age": "7d", "max_size": "5gb"}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

索引设置

默认1,创建索引时需要指定,之后索引活动期间不可变,后期只能重建。

索引字段类型

字段类型不可变,一旦指定几乎不可变,若要修改,则需要刷新所有历史数据,等同于索引重建。

# 创建索引,设置分片数3、副本数2、更新间隔1PUT /index_04
{
    "settings": {"number_of_shards": 3, "number_of_replicas": 2, "refresh_interval": "1s"}
}
  • 1
  • 2
  • 3
  • 4
  • 5

索引副本数可以动态修改,默认1
索引有很多高级设置,可以动态修改。

文档模型

文档模型:JSON类型
元数据:
_index 索引名
_type 类型
_id 唯一id
_version 版本
_seqno 序列号
_primary_term
其他

源数据:JSON结构化

ES文档结构模型-常规

平铺型

简单、高效
应用场景:与数据表1-1对应,常规查询搜索

POST index/_doc
{
    "test1": "abc",
    "test2": "def"
}
  • 1
  • 2
  • 3
  • 4
  • 5

对象行:

适用复杂业务场景、复杂对象映射表达

数组型:

常规数据记录

关联类型:

父子关系:join字段类型
键值对关系:nested字段类型
优点:表达能力
缺点:效率低、复杂、维护
应用场景:问答场景、上下文关系、键值对关系
能不用则不用

索引设计经验建议

索引与分片与副本关系

分片数量:索引分片数量不超过节点数量
1个索引40个分片等同于40个1分片1索引

副本数量:索引副本数量少于节点数量。副本数量可多可少。

分片容量

数据容量:分片数据容量上限不超过50GB,建议30GB-50GB
数据条数:单分片不超过2^32-1(21亿条)

数据模型设计原则

简单模型原则
能用平铺模型搞定,尽量平铺
对象深度建议不要超过3级

最细粒度原则
对象嵌套遵循最细粒度原则,上层数据冗余处理

多索引原则
单一索引尽量满足单一业务场景
不同业务场景索引即使数据模型相似也要分开

大宽表索引原则
特殊场景合并多个表时,尽量全部合并在一起
ES不支持Join,大宽表可解决查询问题

源码:

代码入口:
Bootstrap入口启动:Elasticsearch.main
Rest接口层:RestController.dispatchRequest
Action操作转换层:ActionRequest
Execute操作执行层

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/858914
推荐阅读
相关标签
  

闽ICP备14008679号