ES索引知识
索引是数据的载体,存储了文档和映射的信息
索引是具有相同结构的文档的合集体。
设置索引,不仅仅是设置索引名字,还有索引的一些配置,比如:分片和副本,刷新频率,搜索结果的最大参数,索引映射和别名。
{
// 索引的设置部分
"settings": {
// 索引级别的设置
"index": {
// 设置索引的主分片数量,通常在创建索引后不可更改
"number_of_shards": 3,
// 设置每个主分片的副本数量,可以在创建索引后动态调整
"number_of_replicas": 1,
// 设置索引的刷新频率,这里设置为每秒刷新一次
"refresh_interval": "1s",
// 设置搜索结果的最大窗口大小,限制单次搜索返回文档的数量
"max_result_window": 10000
}
},
// 索引的映射部分,定义文档字段的类型和属性
"mappings": {
"properties": {
// 定义一个文本字段,用于全文搜索
"title": {
"type": "text",
// 子字段,用于不分词的精确匹配
"fields": {
"keyword": {
"type": "keyword"
}
}
},
// 定义另一个文本字段,用于存储文章内容
"content": {
"type": "text"
},
// 定义日期字段,用于存储发布日期
"publish_date": {
"type": "date"
},
// 定义关键字字段,用于存储作者名字,通常用于过滤和聚合
"author": {
"type": "keyword"
}
}
},
// 索引的别名部分,为索引设置一个或多个别名
"aliases": {
// 设置一个别名,可以通过别名来操作索引
"myindexalias": {}
}
}
动态设置(修改)索引设置
// 动态设置刷新间隔
PUT /my_index/_settings
{
"index": {
"refresh_interval": "1s" // 每秒刷新一次
}
}
// 动态设置副本数量
PUT /my_index/_settings
{
"index": {
"number_of_replicas": 2 // 更改副本数量为2
}
}
索引别名
- 无缝滚动索引(在线无缝切换索引)
索引别名可以用来实现无缝滚动索引,这意味着可以在不中断服务的情况下替换旧的索引。例如,你可以每天创建一个新的索引来存储当天的数据,并使用别名来指向当前的索引。当需要切换到新索引时,只需将别名重新指向新的索引即可。 - 多索引检索
将多个索引A和B别名设置成相同的C,那么使用这个索引别名C就能应用到两个A和B索引上,相当于一个视图。
索引模板
解决的问题:
- 数据量非常大,需要对索引的生命周期进行管理,要按照日期划分索引,这就要求多个索引的mapping相同,那么每次创建mapping都很麻烦。
- 数据业务中有多个相同mapping的索引(因为想要跨索引查询),那么如何保证这些mapping相同呢?
索引模板的定义
普通完全模板
{
"index_patterns": ["myindex-*"], // 匹配所有以myindex-开头的索引
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"timestamp": {
"type": "date"
},
"user": {
"type": "keyword"
},
"message": {
"type": "text"
}
}
},
"aliases": {
"myindex-read": {}, // 为索引创建一个别名
"myindex-write": {} // 为索引创建另一个别名
}
}
组件模板
组件模板 - 设置
{
"template": {
"settings": {
"number_of_shards": 3
}
},
"priority": 10
}```
这个组件模板定义了索引的分片数,并且设置了优先级为10。
**组件模板 - 映射**
```PUT _component_template/component_mappings_example
{
"template": {
"mappings": {
"properties": {
"user": {
"type": "keyword"
}
}
}
}
}
这个组件模板定义了索引的映射,包括一个user字段。
组件模板 - 别名
{
"template": {
"aliases": {
"myindex-read": {}
}
}
}
这个组件模板定义了一个别名myindex-read。
使用组件模板创建完全模板
现在,我们可以使用上面定义的组件模板来创建一个完全模板:
{
"index_patterns": ["myindex-*"],
"composed_of": ["component_settings_example", "component_mappings_example", "component_aliases_example"],
"priority": 1
}