ElasticSearch 学习记录之如任何设计可扩容的索引结构
ElasticSearch 系列文章
1 ES 入门之一 安装ElasticSearcha
2 ES 记录之如何创建一个索引映射
3 ElasticSearch 学习记录之Text keyword 两种基本类型区别
4 ES 入门记录之 match和term查询的区别
5 ElasticSearch 学习记录之ES几种常见的聚合操作
6 ElasticSearch 学习记录之父子结构的查询
7 ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询
8 ElasticSearch 学习记录之ES高亮搜索
9 ElasticSearch 学习记录之ES短语匹配基本用法
10 ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理
11 ElasticSearch 学习记录之集群分片内部原理
12 ElasticSearch 学习记录之ES如何操作Lucene段
13 ElasticSearch 学习记录之如任何设计可扩容的索引结构
14 ElasticSearch之 控制相关度原理讲解
扩容设计
扩容的单元
一个分片即一个 Lucene 索引 ,一个 Elasticsearch 索引即一系列分片的集合
一个分片即为 扩容的单元 。 一个最小的索引拥有一个分片。
一个只有一个分片的索引无扩容因子
-
如何判断一个请求过来,我的信息在哪个分片上面
- shard = hash(routing) % number_of_primary_shards
- routing 大致是指文档的id
分片预分配
一个分片存在于单个节点, 但一个节点可以持有多个分片
一个拥有两个分片的索引可以利用第二个节点来存储数据
-
Elasticsearch 中新添加的索引默认被指定了五个主分片
为何不使用分片的分裂而是分片复制转移
- 分裂分片是重新索引数据,比复制更重
- 分裂是指数级的
- 分裂需要足够大的空间
海量分片
- 如何控制分片的数量
- 分片的数据模型是什么
- 一个分片的底层是Lucene索引,会消耗文件的句柄 内存 CPU 等
- 每个搜索请求都会命中索引的每个分片,多个分片咋同一个节点上会竞争资源
- 基于相关度的词频信息计算是基于分片的
容量规划
- 如何根据自己的自身情况,来判断分片的多少
- 可以根据下面的步骤,在特定环境中测定分片的多少
- 基于生产的单个节点集群
- 和生产相同的索引,知识他只有一个主分片无副本分片
- 索引实际文档
- 查询或聚合实际文档
- 在真实的环境上运行,直到它挂掉。
- 然后根据上面的信息,来进行分片的数量的计算
副本分片
副本分片的主要目的就是为了故障转移
如果持有主分片的节点挂掉了,一个副本分片就会晋升为主分片
新文档首先被索引进主分片然后再同步到其它所有的副本分片
副本分片可以服务于读请求
可以通过增加副本的数目来提升查询性能
一个拥有两个主分片一份副本的索引可以在四个节点中横向扩展

过调整副本数来均衡节点负载
- 原则上一个主分片不会它索引的副本分片在一起

多索引
- 如何不停服务来增加容量
- 创建一个新的索引存储数据
- 同时搜索两个索引来获取新数据和旧数据
- 使用索引别名来同时查询两个索引的数据
索引模板‘
使用模板可以创建有用的索引
创建索引模板PUT /_template/my_logs 创建一个名为 my_logs 的模板
{
"template": "logstash-*",
将这个模板应用于所有以 logstash- 为起始的索引
"order": 1, 这个模板将会覆盖默认的 logstash 模板,因为默认模板的 order 更低。
"settings": {
"number_of_shards": 1 限制主分片数量为 1
},
"mappings": {
"default": { 为所有类型禁用 _all 域
"_all": {
"enabled": false
}
}
},
"aliases": {
"last_3_months": {}
添加这个索引至 last_3_months 别名中。
}
}
数据过期
一次删除多个索引
- DELETE /logs_2013* //使用通配符
关闭旧的索引
POST /logs_2014-01-/_flush 刷写(Flush)所有一月的索引来清空事务日志
POST /logs_2014-01-/_close
关闭所有一月的索引.
POST /logs_2014-01-*/_open当你需要再次访问它们时,使用 open API 来重新打开它们。- DELETE /logs_2013* //使用通配符
归档旧索引数据
非常旧的索引 可以通过snapshot-restore API归档至长期存储
基于用户的数据
Elasticsearch 支持多租户所以每个用户可以在相同的集群中拥有自己的索引
一个用户一个索引”对大多数场景都可以满足
共享索引
利用别名实现一个用户一个索引
对子文档进行聚合操作
POST product/_search
{
"size": 0,
"aggs": {
"productSource": {
"terms": {
"field": "productSource"
},
"aggs": {
"prices": {
"children": {
"type": "price"
},
"aggs": {
"minPrice": {
"terms": {
"field": "minPrice"
}
}
}
}
}
}
}
}
ElasticSearch 学习记录之如任何设计可扩容的索引结构的更多相关文章
- ElasticSearch 学习记录之ES几种常见的聚合操作
ES几种常见的聚合操作 普通聚合 POST /product/_search { "size": 0, "aggs": { "agg_city&quo ...
- ElasticSearch 学习记录之ES短语匹配基本用法
短语匹配 短语匹配故名思意就是对分词后的短语就是匹配,而不是仅仅对单独的单词进行匹配 下面就是根据下面的脚本例子来看整个短语匹配的有哪些作用和优点 GET /my_index/my_type/_sea ...
- ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理
分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...
- ElasticSearch 学习记录之ES高亮搜索
高亮搜索 ES 通过在查询的时候可以在查询之后的字段数据加上html 标签字段,使文档在在web 界面上显示的时候是由颜色或者字体格式的 GET /product/_search { "si ...
- ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询
ES添加排序 在默认的情况下,ES 是根据文档的得分score来进行文档额排序的.但是自己可以根据自己的针对一些字段进行排序.就像下面的查询脚本一样.下面的这个查询是根据productid这个值进行排 ...
- ElasticSearch 学习记录之父子结构的查询
父子结构 父亲type属性查询子type 的类型 父子结构的查询,可以通过父亲类型的字段,查询出子类型的索引信息 POST /product/_search { "query": ...
- ElasticSearch 学习记录之Text keyword 两种基本类型区别
ElasticSearch 系列文章 1 ES 入门之一 安装ElasticSearcha 2 ES 记录之如何创建一个索引映射 3 ElasticSearch 学习记录之Text keyword 两 ...
- Elasticsearch学习记录(分布式的特性)
Elasticsearch学习记录(分布式的特性) 分布式的特性 我们提到Elasticsearch可以扩展到上百(甚至上千)的服务器来处理PB级的数据.然而我们的例子只给出了一些使用Elastics ...
- Elasticsearch学习记录(入门篇)
Elasticsearch学习记录(入门篇) 1. Elasticsearch的请求与结果 请求结构 curl -X<VERB> '<PROTOCOL>://<HOST& ...
随机推荐
- fetch知识点汇总
使用XHR发送一个json请求一般是这样: const xhr = new XMLHttpRequest() xhr.open('Get', url) xhr.responseType = 'json ...
- 编程语言的基础——搞定JavaIO
关键字:IO基础,JUnit生命周期,字节流,字符流,字符编码,对象流,序列化,反序列化 Java I/O 流是一组有顺序的,有起点和终点的字节集合.是对设备文件间数据传输的总称和抽象. 在IO中涉及 ...
- 将项目打包成jar,如何又将jar还原成项目
一.将项目打包成jar 第一步: 选择项目,鼠标右键,选择export ,出现如下 接下来就是点击Next,Next,最后点击Finish 后 会生成jar 二.将jar还原成项目 第一步 用反编译工 ...
- 大数据学习系列之三 ----- HBase Java Api 图文详解
版权声明: 作者:虚无境 博客园出处:http://www.cnblogs.com/xuwujing CSDN出处:http://blog.csdn.net/qazwsxpcm 个人博客出处:http ...
- Netty之粘包分包
粘包现象 客户端在一个for循环内连续发送1000个hello给Netty服务器端, Socket socket = new Socket("127.0.0.1", 10101); ...
- UITableView使用过程中可能遇到的问题
前言:记录一些UITableView使用过程中可能遇到的问题 环境:Xcode9 解决UITableViewStyleGrouped类型的TableView的cell距离顶部有距离的问题: table ...
- CAN通讯的总结
1.CAN通讯有套国际标准,套协议版本号,种故障状态,种数据帧类型,种总线错误类型. 2.CAN的国际标准有两种ISO11898和ISO11519. 3.CAN2.0协议分为A版和B版两种,A版协议仅 ...
- C++、Objective-C 混合编程
在XCODE中想使用C++代码,你须要把文件的扩展名从.m改成.mm.这样才会启动g++编译器. 我们来看个測试代码: [java] view plaincopy class TestC { priv ...
- 《Javascript_Dom 编程艺术》(第2版)读书笔记
第1章 Javascript 简史 Dom : 平稳退化.渐进增强,以用户为中心的设计 第2章 Javascript 语法 1.程序设计语言分为:解释性(javascript)和编译型(java,C+ ...
- Android使用XUtils框架上传照片(一张或多张)和文本,server接收照片和文字(无乱码)
Android上传图片,这里我使用了如今比較流行的XUtils框架.该框架能够实现文件上传.文件下载.图片缓存等等,有待研究. 以下是Android端上传的代码: xUtils.jar下载 Strin ...