相信在平常的项目中,我们经常会用到es去查询高频出现的数据,通常每个业务线会申请自己独立的es集群,那么就需要对自己要存储的数据的量级做一个大致的了解,比如只存储近一年的数据,大概需要占用的内存是多少,以及es集群的节点分片怎么设置,本期就简单介绍一下es集群的那些事。
ES是一个基于RESTful web接口并且构建在Apache Lucene之上的开源分布式搜索引擎。同时ES还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储以及处理PB级的数据。
可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。
一般搭建一个es集群需要三个角色的节点,分别是主节点(Master node)、数据节点(Data node)、协调节点(Coordinating node)。接下来就简单的介绍一下以上几个节点:
命令:GET _cat/allocation/?v
shards 节点所承载的分片数
disk.indices 索引占用的空间大小
disk.used 节点所在机器已使用磁盘空间
disk.avail 节点所在机器剩余磁盘空间
disk.total 节点所在机器磁盘空间
host和ip 节点所属机器IP地址
node 节点名
命令:GET _cat/nodes?v
ip 节点的IP地址
heap.percent 堆内存占用百分比
ram.percent 内存占用百分比
cpu CPU占用百分比
master *表示节点是集群中的主节点
name 节点名
命令:GET _cat/indices/?v
health 索引的健康状态
index 索引名
pri 索引主分片数量
rep 副本数量
store.size 索引主分片 复制分片 总占用存储空间
pri.store.size 索引总占用空间, 不计算复制分片 占用空间
命令:GET _cat/shards/?v
index 索引名称
shard 分片序号
prirep p表示该分片是主分片, r 表示该分片是复制分片
store 该分片占用存储空间
node 所属节点节点名
docs 分片存放的文档数
以上就是es简单的一些查询状态信息,当然还有一些其他的命令,有需要的可以在网上搜索进行查看。
查询语句:
GET /index_name _*/_search
对索引名称前缀为index_name的进行查询,以下是查询param=1,且按time倒序输出,es默认最大返回数据10000条,from和size是分页的数据:
GET /index_name _*/_search
{
"from":0,
"size":1000,
"query":{
"bool":{
"must":[
{
"term":{
"param":{
"value":"1",
"boost":1
}
}
}
],
"adjust_pure_negative":true,
"boost":1
}
},
"sort":[
{
"time":{
"order":"desc"
}
}
]
}
查询结果:
{
"took" : 591,
"timed_out" : false,
"_shards" : {
"total" : 48,
"successful" : 48,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 0,
"relation" : "eq"
},
"max_score" : null,
"hits" : [ ]
}
}
hits里的value值是查出来的数量,hits数组是查询的数据,我们可以看到查出来的数据为空。
ES搜索在项目中会经常用到,但是有时候需要自己申请一套es集群,那么以上的基本信息就需要了解,在尽可能满足功能要求的基础上节约成本,那么es集群就需要结合具体的业务场景去合理的配置。希望以上内容能够对你有所帮助!!!