#此时的索引setting参数读取默认模板进行适配,且不包含任何mapping字段
PUT /my-index-000001
#在该创建语句中我们创建索引并在settings中设置索引的主分片数与副本分片数。如果我们需要设置其他参数也同意添加至settings中。
PUT /my-index-000001
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
#在该创建语句中,我们指定了索引的主分片数,并设置了mapping字段类型。将field1字段设置为text类型。如果需要添加其他字段则同意添加至mapping部分中。
PUT /test
{
"settings": {
"number_of_shards": 1
},
"mappings": {
"properties": {
"field1": { "type": "text" }
}
}
}
需要值的注意的是:在elasticsearch7.x版本之后,已经默认不在支持_type。而是一个index存储一份独立的数据。类似于库表合一的概念。
elasticsearch版本 | 是否支持_type | 备注 |
---|---|---|
5.x | 支持 | 支持一个索引中配置多个_type |
6.8.x | 支持 | 支持一个索引中仅配置一个_type |
7.x | 不支持 | 留了通过"include_type_name"参数支持在索引中配置一个_type |
8.x | 不支持 | 不在通过参数支持配置_type |
#创建名为test的索引,并为索引制定一个别名
PUT /test
{
"aliases": {
"alias_1": {},
"alias_2": {
"filter": {
"term": { "user.id": "kimchy" }
},
"routing": "shard-1"
}
}
}
#此外别名还支持动态按天,按月这类方式自动生成
PUT /logs
{
"aliases": {
"<logs_{now/M}>": {}
}
}
别名的应用场景:
例如业务系统通过统一的名称对索引进行写入。而索引存储设计上又需要将数据划分为多个索引,例如按天生成索引进行写入。此时我们就可以通过别名对索引进行写入。别名每天作用于新建的索引上。每天的数据只对当天的索引进行写入。
DELETE /my-index-000001
顾名思义,删除索引是直接将索引在集群中删除。这种方式可以直接释放磁盘空间,降低集群负载。
当集群中有大量索引时,我们通过DELETE api一个一个删除索引过于麻烦,是否有更加便捷的方法呢?
DELETE /test-*
我们可以通过通配符的方式对不再使用的索引进行快速删除。
如果集群没有打开通过通配符匹配索引,我们还需要将一下参数值设置为true。该参数默认值为false。
action.destructive_requires_name = true
GET /my-index-000001
通过该API,我们能够获取到索引的详细内容,包含settings中的当前索引的全部参数以及mappings中的全部字段映射。
在我们创建索引时,没有指定索引mapping,然后对索引进行数据写入。发现elasticsearch会对索引自动进行mapping的生成。(这是由于elasticsearch具备字段类型推测的能力,能够根据传入的数据值,自动推断出相应字段的字段类型,进而在索引中创建相应的mapping。)
例如:当我们对索引中某个字段做match查询时,发现没有数据返回,然而我们传入的数据却是符合要求的字符串。此时我们就需要排查相应字段的类型。通过GET /index
来分析具体的字段类型,排查问题原因。一般都是由于自动推断时将字段类型推断为了keyword。导致我们无法对该字段进行match查询。
HEAD my-data-stream
一般我们用该API检测当前集群中是否存在特定名称的索引(index),数据流(data_stream),别名(aliases)等。
该API的功能类似于我们在关系型数据库中创建数据库或数据表时对于库名或表名的判断;使用IF NOT EXISTS database_name;
对数据库是否存在进行判断。
POST /my-index-000001/_close
我们可以使用该API关闭掉索引,只是将索引进行关闭,关闭后索引将不在读写。但索引中的数据仍保留在集群中。
当我们在某个时间对于部分业务索引暂时不使用,又想保留该索引的数据,以便日后使用,我们就可以使用_close API。后续业务需要查询该索引时,我们就可以重新把索引进行打开。当索引关闭后elasticsearch集群将不在维护该索引的数据结构。缓存在内存中的该索引的元数据信息也会被释放。在一定程度上可以降低集群性能的开销。
POST /my-index-000001/_open
有_close索引与之对应就会有_open索引。当我们需要启用之前被关闭的索引时,我们就可以通过_open API打开索引。
注意:当我们打开索引时,需要提前评估集群当前的负载,是否能够支撑索引打开后的资源需求,因为当索引打开后集群会重新维护这些被打开索引的数据结构。会增大集群的开销。
POST /my-index-000001/_shrink/shrunk-my-index-000001
该API主要用于收缩索引,例如my-index-000001索引有8个主分片,我们通过_shrink API 可以将my-index-000001
收缩为4个主分片,索引名为shrunk-my-index-000001。
日志场景:我们需要对当天大量写入的日志索引配置较多的主分片,以提高写入性能。次日,前一天的日志索引已经不再有数据写入,我们就可以通过收缩索引,对前一日的索引进行收缩,降低历史日志索引的主分片数,从而降低集群整体的主分片数,从而降低集群整体负载。便于集群将更多的资源应用在大量读写的索引中。
POST /my-index-000001/_split/split-my-index-000001
{
"settings": {
"index.number_of_shards": 2
}
}
通过该API,我们可以将源索引切分出更多的主分片。
当某个索引前期分片设计不合理,索引中存在大分片,造成读写速度慢,集群资源利用不充分,分片初始化,搬迁时间长等问题。导致无法满足业务需求。则可以通过切分索引的方式将索引的主分片数增多,便于后续分片分布到更多的数据节点中,以满足业务的读写需求。
POST /my-index-000001/_clone/cloned-my-index-000001
通过该API,我们可以快速复制出基于源索引的全部参数配置与mapping信息的新索引。同时数据也会被克隆至新索引中。这个操作类似于我们在数据库中拷贝表的操作。
POST my-data-stream/_rollover
通过该API,我们可以对索引进行滚动。一般需要与ILM(索引生命周期策略)结合使用;
通过对索引进行rollover操作,可以让索引根据数据量大小,分片体积大小,时间等进行动态滚动。能够有效的控制每一个索引的数据总量,同时结合ILM,实现自动对索引进行滚动创建,降冷,收缩,删除等操作。降低了elasticsearch使用人员的工作量。保障业务稳定运行与集群稳定运行。
POST /<index>/_freeze
使用该API,我们可以对索引进行冻结操作。索引冻结后,仅用于查询,将不会在进行数据写入以及索引内部的段合并。
POST /<index>/_unfreeze
使用该API我们可以对索引进行解冻操作。当我们需要对冻结索引恢复读写或进行其他操作时,我们就需要对索引进行解冻。需要注意的是在解冻前我们需要评估当前集群的资源是否能够承载索引解冻后的资源消耗。
GET /_resolve/index/<name>
通过该API我们可以对索引进行解析,以获取索引相应的元数据信息。返回示例如下:
{
"indices": [
{
"name": "foo_closed",
"attributes": [
"closed"
]
},
{
"name": "freeze-index",
"aliases": [
"f-alias"
],
"attributes": [
"frozen",
"open"
]
},
{
"name": "remoteCluster1:bar-01",
"attributes": [
"open"
]
}
],
"aliases": [
{
"name": "f-alias",
"indices": [
"freeze-index",
"my-index-000001"
]
}
],
"data_streams": [
{
"name": "foo",
"backing_indices": [
".ds-foo-2099.03.07-000001"
],
"timestamp_field": "@timestamp"
}
]
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。