ElasticSearch 集群索引和分片的CURD
一、ES集群的索引
背景:Elasticsearch会对所有输入的文本进行处理,建立索引放入内存中,从而提高搜索效率。在这一点上ES优于MYSQL的B+树的结构,MYSQL需要将索引放入磁盘,每次读取需要先从磁盘读取索引然后寻找对应的数据节点,但是ES能够直接在内存中就找到目标文档对应的大致位置,最大化提高效率。
ES为了提高搜索效率、优化存储空间做了很多工作。为了能够快速定位到目标文档,ES使用倒排索引技术来优化搜索速度,虽然空间消耗比较大,但是搜索性能提高十分显著。
ES的filter语句采用了Roaring Bitmap技术来缓存搜索结果,保证高频filter查询速度的同时降低存储空间消耗。
(一)索引(index):
用户写入ES集群的逻辑单元。
(二)分片(shard):
一个索引最少一个分片。将索引的数据分布式的存储在ES集群。
(三)副本(replica):
一个分片可以有0个或多个副本。为同一个分片数据提供数据冗余。
(四)文档(docment):
1.所有的数据都是以文档的形式存储,并存储在分片中。
2.数据对应一个json的object数据类型存储。
(五)主分片和副本分片的区别:
主分片可以用于读写操作(rw)。
副本分片仅能用于读取操作(ro)。
二、分片
默认半数分片写入成功即可:主分片数量+副本分片数量+1
三、集群的颜色:
(一)绿色 GREEN
表示所有的主分片和副本分片均正常工作。
(二)黄色 YELLOW
表示有部分副本分片不正常工作。
(三)红色RED
表示有部分主分片不正常工作。
四、索引管理
(一)Google浏览器安装插件试图查看索引状态
(二)查看索引
1.查看所有的索引
curl -X GET 10.0.0.151:9200/_cat/indices
2.查看单个索引
10.0.0.151:9200/.geoip_databases
(二)创建索引
1.创建默认索引
curl -XPUT 10.0.0.151:9200/oldboyedu-linux85
{
"settings":{
"number_of_shards":3
}
}
2.创建指定的分片
创建yedu-linux85索引,具备三个分片一个副本;
三个分片一个副本
3.创建指定的分片和副本
curl -XPUT 10.0.0.151:9200/yedu-linux87
{
"settings":{
"number_of_shards":3
}
}
三个分片,0个副本
4.创建指定分片,让部分分片不能工作
5个分片,3个副本
1个主分片+3个副本分片 > 主机数量 ;会限制一个主分片+3个副本分片
现象:有部分分片没有正常工作,显示黄色
2个副本+1个主分片 = 3个 没有超过主机数量
(三)修改索引
1.修改副本
1、5个分片+1个副本
2、1个主分片+1个副本 < 主机数量
2.修改分片
修改分片失败;
失败的原因:文档写入哪个分片编号计算公式=hash(文档ID) % primary_shards_numbers ----> [0,2]
(四)删除索引
1.删除单个索引
curl -XDELETE 10.0.0.151:9200/yedu-linux88-002
2.基于通配符删除多个索引