Elasticsearch 8.x 版本首个版本 Elasticsearch 8.0.0 发布于 2022 年 2 月 11 日4。
Elasticsearch 7.x 版本于 2019 年开始发布,首个版本 Elasticsearch 7.0.0 发布于 2019 年 4 月 10 日4。
主要版本概述
Elasticsearch的发展历程中,几个主要版本带来了重大变革。2010年发布的1.x版本奠定了分布式搜索的基础。2016年的5.x版本引入了多项性能优化和新特性。2017年的6.x版本进一步简化了索引管理,限制一个索引只能有一个映射类型。2018年发布的7.x版本开始弃用类型概念,并在集群管理、安全性等方面进行改进。2021年底发布的8.x版本则在安全性、新搜索API特性以及与机器学习的集成上有更多创新。
以下是Elasticsearch 6.x、7.x、8.x三个版本的核心差异对比表格,涵盖架构、功能、API、兼容性等关键维度
Elasticsearch 6.x、7.x、8.x 版本差异对比
关键版本特性解析
1. 6.x → 7.x:架构与类型的重大变革
多类型移除:6.x中多类型索引(如
user和post共存于一个索引)在7.x被彻底废弃,强制单类型设计,避免数据结构混乱。客户端升级:
TransportClient因Java兼容性问题被弃用,转向HTTP协议的RestHighLevelClient,提升跨语言兼容性。
2. 7.x → 8.x:安全与智能化升级
安全内置化:8.x将7.x中X-Pack的基础安全功能(认证、加密)集成到核心模块,默认启用TLS和密码认证,降低安全配置门槛。
向量搜索落地:新增
dense_vector字段类型和向量搜索API,支持语义检索(如文档相似性匹配),适配AI检索场景(如推荐系统、问答系统)。
3. 版本选择建议
6.x:仅适用于无法升级的遗留系统(如老日志集群),但需注意官方已停止维护,存在安全风险。
7.x:适合需要稳定性和兼容性的场景(如日志分析、传统搜索),但需手动配置安全模块。
8.x:推荐用于需要向量搜索、自动化运维(ILM)和高安全性的现代应用(如智能检索、时序数据监控)。
升级注意事项
6.x → 7.x:
提前迁移多类型索引至单类型,使用
reindexAPI重构数据结构。替换
TransportClient为RestHighLevelClient,调整客户端代码。
7.x → 8.x:
配置内置Security模块,生成证书并启用认证(如设置Kibana访问密码)。
若使用向量检索场景,需提前测试
dense_vector字段和相关API兼容性。
更多细节可参考官方版本说明:
API差异详细分析
索引与文档操作
在早期版本(1.x - 6.x)中,索引可以包含多个映射类型,这使得在同一个索引中存储不同结构的文档成为可能。例如,在一个名为company的索引中,可以有employee和department两种类型的文档。创建索引和文档的API调用方式如下:
// 创建索引并定义类型映射(6.x版本示例)
PUT /company
{
"mappings": {
"employee": {
"properties": {
"name": { "type": "text" },
"age": { "type": "integer" }
}
},
"department": {
"properties": {
"name": { "type": "text" },
"size": { "type": "integer" }
}
}
}
}
// 索引一个员工文档(6.x版本示例)
PUT /company/employee/1
{
"name": "John Doe",
"age": 30
}
从7.0版本开始,映射类型被逐步弃用,走向无类型(typeless)的设计。到8.x版本完全移除类型概念。在无类型API中,创建索引和索引文档的方式简化为:
// 创建索引(7.x及以上版本示例)
PUT /company
{
"mappings": {
"properties": {
"name": { "type": "text" },
"age": { "type": "integer" }
}
}
}
// 索引一个文档(7.x及以上版本示例)
PUT /company/_doc/1
{
"name": "John Doe",
"age": 30
}
这种变化简化了索引结构,避免了不同类型间字段映射冲突的问题,同时也优化了索引性能和存储效率。
搜索API变化
语法简化
早期版本的搜索API语法相对复杂,例如在多条件查询时,需要使用较为繁琐的布尔查询结构。以查询年龄大于30且名字包含“John”的员工为例,在6.x版本中:
GET /company/employee/_search
{
"query": {
"bool": {
"must": [
{ "match": { "name": "John" } },
{ "range": { "age": { "gt": 30 } } }
]
}
}
}
在7.x及以上版本中,语法得到了一定简化,虽然布尔查询结构依然是核心,但整体更加简洁直观:
GET /company/_search
{
"query": {
"bool": {
"must": [
{ "match": { "name": "John" } },
{ "range": { "age": { "gt": 30 } } }
]
}
}
}
新特性引入
8.x版本引入了一些新的搜索API特性,如支持自然语言处理(NLP)的查询。通过新的query_string语法,可以直接使用自然语言进行搜索:
GET /company/_search
{
"query": {
"query_string": {
"query": "employees older than 30 named John",
"default_field": "name"
}
}
}
这种新特性使得非技术用户也能方便地进行复杂搜索,极大地拓展了Elasticsearch在智能搜索场景中的应用。
集群管理API
节点管理
在早期版本中,添加或删除节点的操作相对复杂,需要手动修改配置文件并重启相关服务。例如在1.x版本中,要添加一个节点,需要在新节点的配置文件中正确配置集群名称、节点名称以及与其他节点的通信地址等信息,然后启动节点。而在7.x及以上版本中,通过API可以更方便地管理节点。例如,使用_cluster/settings API可以动态修改集群的一些设置,包括添加或删除节点的相关配置:
// 动态更新集群设置以添加新节点(示例配置,实际需根据环境调整)
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"nodes": {
"new_node": {
"host": "new_node_ip",
"port": 9300
}
}
}
}
}
集群状态监控
随着版本演进,集群状态监控API也变得更加丰富和易用。在早期版本中,获取集群状态信息相对有限。而在8.x版本中,_cluster/health API返回的信息更加详细,不仅可以查看集群的健康状态(绿色、黄色、红色),还能获取更多关于分片分配、节点状态等信息:
GET /_cluster/health?pretty=true
通过上述API调用,可以得到类似如下详细的集群健康信息:
{
"cluster_name": "my_cluster",
"status": "green",
"timed_out": false,
"number_of_nodes": 3,
"number_of_data_nodes": 3,
"active_primary_shards": 10,
"active_shards": 20,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0,
"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": 100.0
}
这些信息对于及时发现集群中的潜在问题,如节点故障、分片分配不均等,提供了有力支持。
安全相关API
早期版本(如1.x - 5.x)中,Elasticsearch的安全性相对较弱,缺乏完善的认证、授权和加密机制。从6.x版本开始,逐渐加强安全特性,到7.x和8.x版本,安全相关API得到了极大丰富。 在7.x版本中,引入了基于角色的访问控制(RBAC),可以通过API创建角色、用户,并分配权限。例如,创建一个具有只读权限的角色和用户:
// 创建只读角色
PUT /_security/role/read_only_role
{
"cluster": ["monitor"],
"indices": [
{
"names": ["*"],
"privileges": ["read"]
}
]
}
// 创建用户并关联角色
PUT /_security/user/read_only_user
{
"password": "password",
"roles": ["read_only_role"]
}
在8.x版本中,安全功能进一步增强,默认开启了更多安全特性,如TLS加密等。同时,安全配置和管理的API也更加完善,例如可以通过API方便地管理SSL证书:
// 上传SSL证书(示例,实际操作可能因环境复杂)
PUT /_ssl/certificates/my_cert
{
"certificate": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
"private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
}
这些安全相关API的改进,使得Elasticsearch在企业级应用中能够更好地满足数据安全和合规性要求。
版本升级建议
从低版本升级到7.x
如果从1.x - 6.x版本升级到7.x版本,首先需要关注类型弃用的问题。在升级前,应检查代码中所有与类型相关的API调用,将其修改为无类型的调用方式。例如,将索引文档的API从/index/type/id改为/index/_doc/id。同时,由于7.x版本在集群管理、搜索API等方面有优化,建议对相关代码进行全面审查和测试,确保在新环境下功能正常。对于安全方面,要利用新的RBAC机制重新规划和配置用户权限。
从7.x升级到8.x
从7.x升级到8.x时,新的搜索API特性(如NLP支持)为优化搜索功能提供了机会,可以评估是否将其集成到现有应用中。在安全方面,8.x版本默认开启更多安全特性,需要确保相关配置正确,如SSL证书的配置等。此外,集群管理API在8.x版本可能有一些小的调整,要注意检查与集群监控、节点管理相关的代码是否需要更新。
评论区