Elasticsearch常用命令&基础知识
> 关于ES的 index 和 type
ES中的 type 允许我们在一个 index 里存储多种类型的数据,这样就可以减少 index 的数量。在使用时,向每个文档加入 _type 字段,在指定 type 搜索时就会被用于过滤。
使用 type 的优点:搜索一个 index 下的多个 type 时,和只搜索一个 type 相比,没有增加额外的开销,因为需要合并结果的分片数量是一样的。
使用 type 的限制:不同 type 里的字段需要保持一致。一个 index 下的不同 type 里有两个名字相同的字段,他们的数据类型和配置也必须一致。
只在某个 type 里存在的字段,在其他没有该字段的 type 中也会消耗资源。如果连续文档之间的差异太大,稀疏的 posting list 的压缩效率不高。这个问题在 doc value 上更为严重:为了提高速度,doc value 通常会为每个文档预留一个固定大小的空间,以便文档可以被高速检索。这意味着,如果 Lucene 确定它需要一个字节来存储某个数字类型的字段,它同样会给没有这个字段的文档预留一个字节。因此,建模的时候尽量避免稀疏。
所以,实际使用时,只有同一个 index 的中的 type 都有类似的映射时,才应该使用 type。否则,使用多个 type 可能比使用多个 index(每个 index 仅一个 type)消耗的资源更多。
注意:ES 官方在新版本(ES7.x)版本上,就移除了 type。
> ES命名规范
ES index 索引命名规范:
1)受文件系统的限制,仅可能为小写字母,不能下划线开头
2)不能包括 , /, *, ?, ", <, >, |, 空格, 逗号, #
3)7.0版本之前可以使用冒号:,但不建议使用并在7.0版本之后不再支持
4)不能以这些字符 -, _, + 开头
5)不能包括 . 或 …
6)长度不能超过 255 个字符
ES类型命名规范:
类型名称可以包括除了null的任何字符,不能以下划线开头。7.0版本之后不再支持类型,默认为_doc。
ES字段命名规范:
对于字段命名规范及不能完全使用空格,点号可以使用。使用使用点号时也要注意:需要保证对象路径必须是有效的。所以,对象命名时
例如:
"data.person.name": "frank" 等同于:
"data": {
"person": {
"name": "frank"
}
}
如果命名为:
"data.": {
"person": {
"name": "frank"
}
}
对象data以点号结尾,就会导致(data..person)路径解析混乱,需要避免这种使用。
> ES常用命令
查询所有 index:
http://localhost:9200/_aliases?pretty=true
{
"index01" : {
"aliases" : { }
},
"testidx" : {
"aliases" : { }
},
"index03" : {
"aliases" : { }
}
}
说明:如果不带参数“?pretty=true”,返回的数据为JSON压缩格式。参数也可以省略为”?preppy“
查询所有 index 索引状态:
http://localhost:9200/_cat/indices?v health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open index01 lA7laqD7SsyI67WnuZLU1g 5 0 1 0 7kb 7kb
green open testidx yxyH3n3SQl6jl0tpQSI-Cw 5 0 1 0 4.6kb 4.6kb
green open index03 WleL8SWjRkehPfbsbwyOWw 5 0 345196 98 14.3mb 14.3mb
查询集群健康状态(*表示ES集群的master主节点):
http://localhost:9200/_cat/nodes?v ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
172.28.0.1 22 97 5 0.70 0.34 0.22 mdi * LM8O7H6http://localhost:9200/_cat/health?pretty 1611576205 20:03:25 elasticsearch yellow 1 1 84 84 0 0 30 0 - 73.7%
查看集群分片状态:
http://localhost:9200/_cluster/health?pretty {
"cluster_name" : "elasticsearch",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 84,
"active_shards" : 84,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 30,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 73.68421052631578
}
单节点的节点数(副本数)为1,status会显示为yellow。集群存在多副本,status会显示正常。