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& ...
随机推荐
- 2018届研究生招生预推免(THU,HIT)经历分享——guochengtao
注:本文为作者原创文章,且为无偿分享,读者可以阅读,但请尊重劳动成果,勿作为商业用途!如对文章中的内容有意见或者出现了您不喜欢的言论,请您保留,谢谢合作! 又到一年12月,这代表着2017年已经接近尾 ...
- SaltStack 架构自动部署 03
架构图 模块化部署 系统模块:系统优化,内核参数,网络参数 功能模块:如:nginx,tomcat, 业务模块: 1.在salt-master端修改配置文件 [root@01 salt]# vim / ...
- KNN--用于手写数字识别
优点:精度高,对异常值不敏感,无数据输入假定 缺点:计算复杂度高,空间复杂度高 适用数据范围:数值型和标称型 一般流程: (1). 收集数据(网络抓取) (2).处理数据,将数据处 ...
- 生成ssl秘钥的方法(纯粹本人记录用的,勿踩)
openssl genrsa -des3 -out server.key 1024 openssl req -new -key server.key -out server.csr cp server ...
- 在网站开发中经常用到的javaScript技术
1>屏蔽功能类 1.1 屏蔽键盘所有键<script language="javascript"><!--function document.onkeyd ...
- C# 把Div变为滚动条
<div runat="server" style="overflow:auto;width:350px;height:200px" > <a ...
- 为PowerApps和Flow,Power BI开发自定义连接器
作者:陈希章 发表于 2017年12月20日 前言 我在之前用了几篇文章来介绍新一代微软商业应用平台三剑客(PowerApps,Microsoft Flow,Power BI),相信对于大家会有一种跃 ...
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
- HDOJ--4893--Wow! Such Sequence!【线段树+单点、区间更新】
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4893 题意:给你一个长度n的数列,初始都为0.有三种操作,第一种给第k个位置的数加d.另外一种是查询区间 ...
- Spring Cache简单介绍和使用
Spring Cache 缓存是实际工作中非经常常使用的一种提高性能的方法, 我们会在很多场景下来使用缓存. 本文通过一个简单的样例进行展开,通过对照我们原来的自己定义缓存和 spring 的基于凝视 ...