跳转至

索引

索引简介

一般意义上的索引是一种基于文档(数据)生成、建立的,用于快速定位指定文档的工具。

img

而 ElasticSearch 对索引的定义有所不同,ElasticSearch 中的索引对应 MySQL 中的 Database ,也就说 ElasticSearch 中的索引更像是一种数据存储集合,即用于存储文档。

ElasticSearch 中的数据根据业务以索引为单位进行划分,Type(类型) 就像 MySQL 中的 Table 一样,用于区分同一业务中不同的数据集合,如下图:

img

当然上图并不是指 ElasticSearch 中就真的这么存储数据,而是大概的表现方式。

不过在 6.x 版本后,就废弃了 Type ,因为设计者发现 ElasticSearch 这种与关系型数据类比的设计方式有缺陷。在关系型数据库中,每个数据表都是相互独立的,即在不同表中相同的数据域是互不关联的。而 ElasticSearch 底层所用的 Lucene 并没有关系型数据中的这种特性,在 ElasticSearch 同一个索引中,不同映射类型但是名称相同的数据域在 Lucene 中是同一个数据域,即作为同一类数据存放在一起。

ElasticSearch 6.x 版本废弃掉 Type 后,建议的是每个类型(业务)的数据单独放在一个索引中,这样其实回归到一般意义上的索引定义,索引定位文档。如下图:

img

上图也是一种大概的表现方式,不代表 ElasticSearch 以这种方式处理文档。

如果 ElasticSearch 还是使用 5.x 或以下版本,建议每个索引只设置一个类型,做到一个索引存储一种数据。

索引操作

查看索引

curl -XGET -u 'elastic:1zsTcnUcjs15Jb5XZyC' http://10.244.244.12:9200/_cat/indices

删除索引

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 .

删除全部索引

curl -XDELETE -u 'elastic:1zsTcnUcjs15Jb5XZyC' 'http://10.244.244.12:9200/index_*'