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会显示正常。