Elasticsearch——Elasticsearch索引管理实战

embedded/2025/1/22 12:47:45/

摘要

本文主要介绍了 Elasticsearch 中索引与索引模板的实战操作。首先讲解了索引管理,包括禁止自动创建索引、索引的格式、创建索引示例、修改索引示例、打开/关闭索引示例、删除索引、查看索引以及 Kibana 管理索引等内容。接着阐述了索引模板管理,涉及模板类型、内置模板示例、模拟多组件模板、模拟某个索引结果、模拟组件模板结果以及模拟组件模板和自身模板结合后的结果等。

1. 索引管理

我们在前文中增加文档时,如下的语句会动态创建一个customer的index:

PUT /customer/_doc/1
{"name": "John Doe"
}

而这个index实际上已经自动创建了它里面的字段(name)的类型。我们不妨看下它自动创建mapping:

{"mappings": {"_doc": {"properties": {"name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}

那么如果我们需要对这个建立索引的过程做更多的控制:比如想要确保这个索引有数量适中的主分片,并且在我们索引任何数据之前,分析器和映射已经被建立好。那么就会引入两点:第一个禁止自动创建索引,第二个是手动创建索引。

1.1. 禁止自动创建索引

可以通过在 config/elasticsearch.yml 的每个节点下添加下面的配置:

action.auto_create_index: false

1.2. 索引的格式

在请求体里面传入设置或类型映射,如下所示:

PUT /my_index
{"settings": { ... any settings ... },"mappings": {"properties": { ... any properties ... }}
}
  • settings: 用来设置分片,副本等配置信息
  • mappings: 字段映射,类型等
    • properties: 由于type在后续版本中会被Deprecated, 所以无需被type嵌套

1.3. 创建索引示例

我们创建一个user 索引test-index-users,其中包含三个属性:name,age, remarks; 存储在一个分片一个副本上。

PUT /test-index-users
{"settings": {"number_of_shards": 1,"number_of_replicas": 1},"mappings": {"properties": {"name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"age": {"type": "long"},"remarks": {"type": "text"}}}
}

1.3.1. 创建索引数据

1.3.2. 插入测试数据

1.3.3. 查看数据

我们再测试下不匹配的数据类型(age):

POST /test-index-users/_doc
{"name": "test user","age": "error_age","remarks": "hello eeee"
}

你可以看到无法类型不匹配的错误:

1.4. 修改索引示例

查看刚才的索引,curl 'localhost:9200/_cat/indices?v' | grep usersyellow open test-index-users                          LSaIB57XSC6uVtGQHoPYxQ 1 1     1    0   4.4kb   4.4kb

我们注意到刚创建的索引的状态是yellow的,因为我测试的环境是单点环境,无法创建副本,但是在上述number_of_replicas配置中设置了副本数是1; 所以在这个时候我们需要修改索引的配置。

修改副本数量为0

PUT /test-index-users/_settings
{"settings": {"number_of_replicas": 0}
}

再次查看状态:

green open test-index-users                          LSaIB57XSC6uVtGQHoPYxQ 1 1     1    0   4.4kb   4.4kb

1.5. 打开/关闭索引示例

关闭索引:一旦索引被关闭,那么这个索引只能显示元数据信息,不能够进行读写操作

当关闭以后,再插入数据时:

打开索引:

打开后又可以重新写数据了

1.6. 删除索引

最后我们将创建的test-index-users删除。

DELETE /test-index-users

1.7. 查看索引

由于test-index-users被删除,所以我们看下之前bank的索引的信息

  • mapping
GET /bank/_mapping

  • settings
GET /bank/_settings

1.8. Kibana管理索引

2. 索引模版管理

索引模板是一种告诉Elasticsearch在创建索引时如何配置索引的方法。在创建索引之前可以先配置模板,这样在创建索引(手动创建索引或通过对文档建立索引)时,模板设置将用作创建索引的基础。

2.1. 模板类型

模板有两种类型:索引模板组件模板

  1. 组件模板是可重用的构建块,用于配置映射,设置和别名;它们不会直接应用于一组索引。
  2. 索引模板可以包含组件模板的集合,也可以直接指定设置,映射和别名。

索引模板中的优先级

  1. 可组合模板优先于旧模板。如果没有可组合模板匹配给定索引,则旧版模板可能仍匹配并被应用。
  2. 如果使用显式设置创建索引并且该索引也与索引模板匹配,则创建索引请求中的设置将优先于索引模板及其组件模板中指定的设置。
  3. 如果新数据流或索引与多个索引模板匹配,则使用优先级最高的索引模板。

内置索引模板

Elasticsearch具有内置索引模板,每个索引模板的优先级为100,适用于以下索引模式:

  1. logs-*-*
  2. metrics-*-*
  3. synthetics-*-*

所以在涉及内建索引模板时,要避免索引模式冲突。

2.2. 内置模版示例

首先创建两个索引组件模板

PUT _component_template/component_template1
{"template": {"mappings": {"properties": {"@timestamp": {"type": "date"}}}}
}PUT _component_template/runtime_component_template
{"template": {"mappings": {"runtime": { "day_of_week": {"type": "keyword","script": {"source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ROOT))"}}}}}
}

执行结果如下:

创建使用组件模板的索引模板

PUT _index_template/template_1
{"index_patterns": ["bar*"],"template": {"settings": {"number_of_shards": 1},"mappings": {"_source": {"enabled": true},"properties": {"host_name": {"type": "keyword"},"created_at": {"type": "date","format": "EEE MMM dd HH:mm:ss Z yyyy"}}},"aliases": {"mydata": { }}},"priority": 500,"composed_of": ["component_template1", "runtime_component_template"], "version": 3,"_meta": {"description": "my custom"}
}

执行结果如下:

创建一个匹配bar*的索引bar-test

PUT /bar-test

然后获取mapping

GET /bar-test/_mapping

执行结果如下

2.3. 模拟多组件模板

由于模板不仅可以由多个组件模板组成,还可以由索引模板自身组成;那么最终的索引设置将是什么呢?ElasticSearch设计者考虑到这个,提供了API进行模拟组合后的模板的配置。

2.4. 模拟某个索引结果

比如上面的template_1, 我们不用创建bar*的索引(这里模拟bar-pdai-test),也可以模拟计算出索引的配置:

POST /_index_template/_simulate_index/bar-pdai-test

执行结果如下

2.5. 模拟组件模板结果

当然,由于template_1模板是由两个组件模板组合的,我们也可以模拟出template_1被组合后的索引配置:

POST /_index_template/_simulate/template_1

执行结果如下:

{"template" : {"settings" : {"index" : {"number_of_shards" : "1"}},"mappings" : {"runtime" : {"day_of_week" : {"type" : "keyword","script" : {"source" : "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ROOT))","lang" : "painless"}}},"properties" : {"@timestamp" : {"type" : "date"},"created_at" : {"type" : "date","format" : "EEE MMM dd HH:mm:ss Z yyyy"},"host_name" : {"type" : "keyword"}}},"aliases" : {"mydata" : { }}},"overlapping" : [ ]
}

2.6. 模拟组件模板和自身模板结合后的结果

  • 新建两个模板
PUT /_component_template/ct1
{"template": {"settings": {"index.number_of_shards": 2}}
}PUT /_component_template/ct2
{"template": {"settings": {"index.number_of_replicas": 0},"mappings": {"properties": {"@timestamp": {"type": "date"}}}}
}

模拟在两个组件模板的基础上,添加自身模板的配置

POST /_index_template/_simulate
{"index_patterns": ["my*"],"template": {"settings" : {"index.number_of_shards" : 3}},"composed_of": ["ct1", "ct2"]
}

执行的结果如下

{"template" : {"settings" : {"index" : {"number_of_shards" : "3","number_of_replicas" : "0"}},"mappings" : {"properties" : {"@timestamp" : {"type" : "date"}}},"aliases" : { }},"overlapping" : [ ]
}

博文参考

  • Index templates | Elasticsearch Guide [8.17] | Elastic
  • Simulate multi-component templates | Elasticsearch Guide [8.17] | Elastic
  • 创建一个索引 | Elasticsearch: 权威指南 | Elastic
  • Mapping | Elasticsearch Guide [8.17] | Elastic
  • Removal of mapping types | Elasticsearch Guide [8.17] | Elastic
  • 一文带您了解 Elasticsearch 中,如何进行索引管理(图文教程) - 犬小哈 - 博客园

http://www.ppmy.cn/embedded/156052.html

相关文章

元素周期表

目前共有118种元素被发现。 一、非金属元素:共有17种 非金属元素,指化学元素中不具有金属特性的元素。 它们在自然界中以多种形态存在,包括固态、液态和气态。 非金属元素的原子通常获得电子以形成阴离子,或者通过共享电子与其他原…

大数据Hadoop中MapReduce的介绍包括编程模型、工作原理(MapReduce、MapTask、ReduceTask、Shuffle工作原理)

MapReduce概述 MapReduce是Hadoop的核心项目之一,它是一个分布式计算框架, 可用于大数据并行处理的计算模型、框架和平台,主要解决海量数据的计算,是大数据中较为熟知的分布式计算框架。 MapReduce作为分布式计算框架&#xff0…

MDX语言的字符串处理

MDX语言的字符串处理 引言 MDX(Multidimensional Expressions)是一种专门用于多维数据库查询和分析的语言,特别是在Microsoft SQL Server Analysis Services(SSAS)中使用广泛。MDX不仅用于查询多维数据,还…

高效安全文件传输新选择!群晖NAS如何实现无公网IP下的SFTP远程连接

文章目录 前言1. 开启群晖SFTP连接2. 群晖安装Cpolar工具3. 创建SFTP公网地址4. 群晖SFTP远程连接5. 固定SFTP公网地址6. SFTP固定地址连接 前言 随着远程办公和数据共享成为新常态,如何高效且安全地管理和传输文件成为了许多人的痛点。如果你正在寻找一个解决方案…

欧几里得算法求最大公约数 与 贝祖等式(Java)

欧几里得算法,即辗转相除法求最大公约数 public class Test2 {public static void main(String[] args) throws Exception {}static long gcd(long a,long b){return b0 ? a : gcd(b,a%b);} } 欧几里得算法的延展-贝祖等式 对任何整数a,b和他们的最大…

K8S中Pod控制器之CronJob(CJ)控制器

CronJob 控制器是 Kubernetes 中用于周期性执行任务的一种控制器,它基于 Job 控制器来创建和管理作业。以下是 CronJob 的一些关键特点: 周期性调度:CronJob 允许您定义一个基于时间的调度,类似于 Linux 的 cron 工具,…

人工智能在数字化转型中的角色:从数据分析到智能决策

引言 在数字化转型浪潮中,人工智能(AI)正迅速崛起,成为推动企业创新和变革的关键力量。面对日益复杂的市场环境和激烈的行业竞争,企业亟需借助技术手段提高运营效率、优化决策过程,并增强市场竞争力。而AI…

代码随想录_字符串

字符串 344.反转字符串 344. 反转字符串 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须**原地修改输入数组**、使用 O(1) 的额外空间解决这一问题。 思路: 双指针 代…