4.ElasticSearch系列之基本概念
1. 文档
- ElasticSearch是面向文档的,文档是所有可搜索数据的最小单位
- 文档会被序列化成JSON格式,保存在ES中
- 每个文档都有一个unique ID
#查看前10条文档,了解文档格式
POST kibana_sample_data_ecommerce/_search
{
}
1.1 文档元数据
{
"_index" : "kibana_sample_data_ecommerce", // 文档所属索引名
"_type" : "_doc", // 文档所属的类型
"_id" : "LY5Jc4IBJLxforJ4rVB5", // 文档唯一ID
"_score" : 1.0, // 相关性打分
"_source" : { // 文档的原始json数据
....
}
}
2. 索引
索引是文档的容器,是一类文档的集合
#查看索引相关信息
GET kibana_sample_data_ecommerce
{
"kibana_sample_data_ecommerce" : {
"aliases" : { },
// mapping定义文档的字段信息
"mappings" : {
"properties" : {
"category" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword"
}
}
},
// settings索引配置信息
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "1", // 分片数为1
"auto_expand_replicas" : "0-1",
"provided_name" : "kibana_sample_data_ecommerce",
"creation_date" : "1659791584389",
"number_of_replicas" : "0", // 副本数0
"uuid" : "iH1-4-krQA6tda3W8Psmbw",
"version" : {
"created" : "7110299"
}
}
}
}
}
}
以下为基本操作
// 查看索引的文档总数
GET kibana_sample_data_ecommerce/_count
// 查看indices
GET _cat/indices/kibana*?format=json
// 查看状态为绿的索引
GET _cat/indices?health=green&format=json
// 按照文档个数排序
GET /_cat/indices?s=docs.count:desc&format=json
// 查看具体的字段
GET /_cat/indices/kibana*?h=health,index,pri,rep,docs.count,mt&format=json
// 索引占用内存查看
GET /_cat/indices?v&h=i,tm&s=tm:desc
3.节点
- 节点是一个ElasticSearch的实例
- 每个节点都有一个名字,通过配置文件配置或启动时-E node.name=node1指定
- 每个节点启动后,会分配一个UID,保存在data目录下
3.1 Master-eligible Nodes和Master Nodes
- 每个节点启动后,默认就是一个Master-eligible节点,可以设置node.master=false禁止
- Master-eligible节点可以参加主节点选举称为Master节点
- 每个节点保存了集群的状态,只有Master节点可以修改集群状态:
- 所有的节点信息
- 所有的索引及其相关的Mapping和Setting信息
- 分片的路由信息
3.2 Data Node和Coordinating Node
- Data Node: 可以保存数据的节点,负责保存分片数据
- Coordinating Node:负责接收client的请求,将请求分发到合适的节点,将结果进汇集,每个节点默认起到协调节点作用
4. 分片
- 主分片,用于解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点上
- 一个分片是一个运行的Lucene的实例
- 主分片数在创建索引时指定,后续不允许修改,除非reindex
- 副本,用于解决数据的高可用问题。副本分片是主分片的拷贝
- 副本分片数,可以动态调整
- 增加副本数,可以一定程度提高服务的可用性(读取的吞吐)
ES7.0开始,默认主分片设置为1,解决了over-sharding问题:
- 影响搜索结果的相关性打分,影响统计结果的准确性
- 单个节点分配过多分片,会导致资源浪费,同时也会影响性能
5. 集群相关查询示例
假设你启动了集群,如果没有多台机器,可以参考
win10下docker部署ES集群代码
# 查看集群节点信息
GET _cat/nodes?v
# 查看集群节点详细信息
GET /_nodes/es-node1,es-node2
# 查看节点指定字段信息
GET /_cat/nodes?v&h=id,ip,port,v,m
# 查看集群健康状态
GET _cluster/health
GET _cluster/health?level=shards
GET /_cluster/health/kibana_sample_data_ecommerce,kibana_sample_data_flights
GET /_cluster/health/kibana_sample_data_flights?level=shards
# 查看集群元数据等信息
GET /_cluster/state
#cluster get settings
GET /_cluster/settings
GET /_cluster/settings?include_defaults=true
# 查看分片情况
GET _cat/shards?v
GET _cat/shards?v&h=index,shard,prirep,state,unassigned.reason