索引
索引简介
一般意义上的索引是一种基于文档(数据)生成、建立的,用于快速定位指定文档的工具。
而 ElasticSearch 对索引的定义有所不同,ElasticSearch 中的索引对应 MySQL 中的 Database ,也就说 ElasticSearch 中的索引更像是一种数据存储集合,即用于存储文档。
ElasticSearch 中的数据根据业务以索引为单位进行划分,Type(类型) 就像 MySQL 中的 Table 一样,用于区分同一业务中不同的数据集合,如下图:
当然上图并不是指 ElasticSearch 中就真的这么存储数据,而是大概的表现方式。
不过在 6.x 版本后,就废弃了 Type ,因为设计者发现 ElasticSearch 这种与关系型数据类比的设计方式有缺陷。在关系型数据库中,每个数据表都是相互独立的,即在不同表中相同的数据域是互不关联的。而 ElasticSearch 底层所用的 Lucene 并没有关系型数据中的这种特性,在 ElasticSearch 同一个索引中,不同映射类型但是名称相同的数据域在 Lucene 中是同一个数据域,即作为同一类数据存放在一起。
ElasticSearch 6.x 版本废弃掉 Type 后,建议的是每个类型(业务)的数据单独放在一个索引中,这样其实回归到一般意义上的索引定义,索引定位文档。如下图:
上图也是一种大概的表现方式,不代表 ElasticSearch 以这种方式处理文档。
如果 ElasticSearch 还是使用 5.x 或以下版本,建议每个索引只设置一个类型,做到一个索引存储一种数据。
索引操作
查看索引
删除索引
curl -XDELETE -u 'elastic:1zsTcnUcjs15Jb5XZyC' http://10.244.244.12:9200/_cat/indices/bigaiv2test-container-log-2023.08.11
按照 namespace 统计
curl -XGET \
-H 'Content-Type: application/json' \
-u 'elastic:1zsTcnUcjs15Jb5XZyC''http://10.244.244.12:9200/bigaiv2test-container-log-2023.08.20/_search' \
-d '{
"size": 0,
"aggs": {
"namespace_stats": {
"terms": {
"field": "kubernetes.pod_namespace.keyword"
}
}
}
}' | jq .
删除全部索引