ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

OpenSearch 3.0.0-beta1 版本解析:Lucene 10、JDK 21 与下一代搜索架构的关键演进

OpenSearch 3.0.0-beta1 版本解析:Lucene 10、JDK 21 与下一代搜索架构的关键演进 OpenSearch 3.0.0-beta1 版本解析Lucene 10、JDK 21 与下一代搜索架构的关键演进【免费下载链接】OpenSearch Open source distributed and RESTful search engine.项目地址: https://gitcode.com/gh_mirrors/op/OpenSearch2025-04-15 发布的 OpenSearch 3.0.0-beta1 是 3.x 主线的一个里程碑版本。本文以官方 Release Notesrelease-notes/opensearch.release-notes-3.0.0-beta1.md为核心骨架结合当前仓库源码逐一解析其中的 Breaking Changes、新特性、依赖升级、弃用与移除项帮助你判断升级到 3.0 的影响面并理解 HTTP/2、pull-based Ingestion、Search 节点角色、GRPC、Views、Star Tree 等新能力的落地方式。读完本文你将掌握 3.0.0-beta1 的完整变更清单及其在源码中的对应实现位置可直接作为升级评估与二次开发的参考手册。一、总览3.0.0-beta1 在版本演进中的定位OpenSearch 的 3.x 分支承载了多年来积累的欠账清理与新一代架构探索。3.0.0-beta1 集中体现了三个主题技术栈换代Lucene 升级到 10.1.0当前仓库主线已演进至 gradle/libs.versions.toml 中的 Lucene 10.5.1最低运行环境要求提升到 JDK 21。大规模清理移除大量历史遗留 API、LegacyESVersion 常量、废弃线程池设置为 JPMSJava Platform Module System支持扫清 split package 障碍。新架构落地HTTP/2 服务端支持、pull-based Ingestion、search_only 节点角色、GRPC 端点、Views 虚拟层、Star Tree 加速等一批面向未来的功能进入主分支。从当前仓库的版本看buildSrc/version.properties 与gradle/libs.versions.toml中 Lucene 已推进到 10.5.1说明仓库处于 3.x 主线 beta1 之后的持续演进状态本文所述变更均已在 3.0.0-beta1 发布时点落地。二、Breaking Changes升级前必须评估的破坏性变更3.0.0-beta1 的 Breaking Changes 主要围绕依赖升级、API 清理与行为收紧三条线展开。2.1 运行环境与依赖基线升级变更项影响升级到 Lucene 10.1.0PR #16366索引格式、查询执行、相关性打分底层全面切换跨版本滚动升级需按官方流程进行JDK 21 成为最低支持运行版本#107453.0 起不再支持 JDK 17 运行构建与部署环境必须准备 JDK 21 LTS迁移客户端传输层到 Apache HttpClient / Core 5.x#4459客户端内部 HTTP 栈换代对依赖旧 httpclient 4.x 的扩展有影响仓库佐证当前 gradle/libs.versions.toml 中lucene 10.5.1且 server/licenses 目录下所有 Lucene 组件均以 10.5.1 发布如lucene-core-10.5.1.jar.sha1印证了 3.x 主线全面切换 Lucene 10 的事实。2.2 Java API 与设置项清理移除 Java API 中的弃用术语#1683将 blacklist/whitelist 类术语全面替换为中性表述任何引用旧 API 名如blacklist相关方法的客户端代码都需要改。清理废弃的线程池设置#2595删除了历史上遗留的线程池相关设置项elasticsearch.thread_pool.*一类的旧配置不再生效。移除mmap.extensions设置#9392mmap 扩展点配置被删除改为使用 Lucene 10 内置的 mmap 能力。移除 COMPAT locale provider#13988配合下方Changed中的 CLDR 切换-Djava.locale.providersCOMPAT场景不再支持。移除 transport-nio 插件#16887transport-nio模块整体移除网络传输统一收敛到 netty4 / reactor-netty4 实现仓库中 libs/nio 仍保留 nio 相关库但传输插件入口已删除。从 Java API 移除废弃方法#5214、#3346包括脚本场景会调用的JodaCompatibleZonedDateTime上的废弃方法等。模块目录下以 Plugin 结尾的类统一改名为 Module#4042影响自定义模块/插件的类名引用。2.3 行为与校验收紧Bulk Index API 校验增强#6595强制_id大小不得超过 512 字节超限请求将被拒绝。设置空数组字符串解析#10625node.roles等设置传入空数组字符串时按空数组处理这直接支撑了纯协调节点能力见下条。允许node.roles传空数组使节点成为纯协调节点#3412配置node.roles: []即可让节点只承担协调coordinating职责不持有任何分片。限制嵌套查询的最大深度#11670新增嵌套查询深度上限防止构造过深的查询导致资源耗尽。Jackson 默认最大值对齐#11811确保 Jackson 2.16 引入的默认流解析上限不与 OpenSearch 自身设置冲突。修正total_indexing_buffer_in_bytes与total_indexing_buffer的格式互换问题#17070修复了这两个节点统计字段单位/含义错位的 bug统计消费方需重新核对。_bulk移除废弃的batch_size参数#14283批量接口不再接受该参数。2.4 安全权限模型收紧新增ThreadContextPermission#15039、#15016stashAndMergeHeaders、stashWithOrigin、markAsSystemContext等 ThreadContext 操作现在受安全权限管控核心模块内部保留执行能力第三方插件若调用这些方法需要显式声明权限。仓库佐证ThreadContextPermission定义位于 libs/secure-sm/src/main/java/org/opensearch/secure_sm/ThreadContextPermission.java且已加入 Java Agent 安全策略白名单 libs/agent-sm/agent-policy/src/main/java/org/opensearch/secure_sm/policy/PolicyFile.java。三、Added3.0.0-beta1 引入的新能力本节按主题分组梳理 Release Notes 中的新增项并给出源码落点。3.1 传输与协议层HTTP/2服务端支持#3847Netty4 传输层开始支持 HTTP/2 协议为后续更高效的客户端通信铺路。仓库中HttpRequest.HttpVersion枚举已包含HTTP_2_0与HTTP_3_0取值见 server/src/main/java/org/opensearch/http/HttpRequest.java。修复 h2c 协议压缩支持#4944、HTTP/2 协议版本识别#17248补齐了明文 HTTP/2h2c下的压缩与版本判定。TLS 启用的 SecureNetty4GrpcServerTransport#17796GRPC 传输支持 TLS 加密。GRPC 端点持续扩展#17727、#17830、#17888新增DocumentService、Bulk、Search、TermsQuery 等 GRPC 端点相关代码位于 modules/transport-grpc。Arrow Flight RPC 插件#16962引入 Flight 服务器引导逻辑与节点间通信客户端作为未来列式数据交换的基础设施。3.2 数据接入pull-based Ingestion3.0.0-beta1 引入了完整的**拉模式数据接入pull-based Ingestion**体系基础 API 与 IngestionEngine#16958引擎主动从 ingestion source 拉取数据而不是被动等待推送。偏移量管理#17354、错误处理#17427、暂停/恢复/状态查询管理 API#17631、版本化支持#17918、update/delete 支持#17822。开箱即用的数据源插件Kafka 插件#16958、Kinesis 插件#17615。可配置性maxPollSize与pollTimeout可在 IngestionSource 中配置#17863。关闭 ingestion engine 的索引 API#17768拉模式场景下数据由引擎写入普通索引 API 被禁用。修复分片恢复时可能跳过消息的问题#17868。3.3 存储与查询优化Views 虚拟层#11957通过一个或多个索引之上提供虚拟视图层简化数据访问与操作。源码落点server/src/main/java/org/opensearch/action/admin/indices/view/ViewService.javaREST 入口为 server/src/main/java/org/opensearch/rest/action/admin/indices/RestViewAction.java。Star Tree 聚合加速#17165、#17273、#17275关键字/数值桶聚合、数值范围聚合支持通过 Star Tree 数据结构解析并补齐 unsigned-long 支持。多桶聚合Multi Term Aggregation延迟与内存优化#14993、数值项聚合避免多余排序#17252提升聚合查询性能。cardinality 聚合新增execution_hint#17312允许用户提示聚合执行策略。ApproximateMatchAllQuery#17772针对 match_all 查询提供近似排序。terms_query对已排序词项加速#17714当提供的词项已排序时可走快速路径。keyword 字段默认关闭打分#17889keyword 词项搜索默认不计算打分需use_similarity: true参数显式开启。限制每节点/每索引主分片总数的集群与索引级设置#17295新增容量治理设置。MergedSegmentWarmerFactory#17881支持扩展 Lucene 的IndexWriter.IndexReaderWarmer。mapping transformer#17635在索引/模板创建或更新时对 mapping 做变换仓库示例见 plugins/examples/mapping-transformer。动态集群设置maxMergeAtOnce#17774可在集群级动态调整合并参数默认值同时提升到 30。3.4 节点角色与分片放置新增search节点角色#17620专门承载 search-only 分片search_only模式#17299支持读写分离场景的 scale-to-zero即搜索节点可在无负载时缩容为零。warm角色替代search命名#17573原search角色更名为warm承载 warm 索引。warm tiering 术语统一#17490新增 Warm 索引设置明确 hot 与 warm 分层语义。Search Only 严格路由设置#17803控制搜索只读节点上的分片路由。SearchReplica 的 AutoExpand 支持#17741副本可随负载自动扩缩容。仓库佐证在 server/src/main/java/org/opensearch/cluster/node/DiscoveryNodeRole.java 中可以看到WARM_ROLE角色名warm缩写w与SEARCH_ROLE角色名search缩写s的完整定义其中SEARCH_ROLE的validateRole强制要求 search 角色不能与任何其他角色共存于同一节点。注意当前源码同时保留两者命名演进仍在进行。3.5 集群管理与可观测性集群状态远程下载开关#16798新增设置控制 term 不匹配时是否从远程下载完整集群状态。主服务性能与关键集群操作日志优化#14795、reroute 超时调度优先级调整#16445。分片级 segment replication 统计#17055、修正倾斜的 segment replication lag 指标#17831。_id与 pipeline ID 的 512 字节上限#17786搜索与 ingest pipeline 统一执行。搜索背压统计新增任务完成计数#10028、SearchTask 取消后长任务跟踪#17726。systemd 配置加固 OS 核心安全#17107并配套集成测试#17410相关配置见 distribution/packages/src/common 下的.service文件。3.6 安全模型Security Manager 替代方案Java Agent阶段化用 Java Agent 替代 SecurityManager#17724、#17746、#17753、#17757、#17760、#17861先创建拦截Socket::connect的 Java Agent随后依次增强System::exit、Runtime::halt拦截加入策略解析器与 File Interceptor 及集成测试最终进入 Phase-off SecurityManager 阶段。仓库佐证Java Agent 相关实现集中在 libs/agent-sm含agent与agent-policy子模块安全策略文件解析见 libs/agent-sm/agent-policy/src/main/java/org/opensearch/secure_sm/policy/PolicyFile.java。3.7 其他值得关注的新增WLM 支持 search scroll API#16981并将QueryGroup更名为WorkloadGroup#17901相关实现见 plugins/workload-management。规则驱动的自动打标Rule Based Auto-tagging三连#17342、#17238、#17365内存属性值存储、规则 schema、内存规则处理服务见 modules/autotagging-commons。配置解析工具类 ConfigurationUtils#17223加入 core 统一配置解析。flat_object字段 DocValues 取值能力#16802。AbstractQueryBuilder/BoolQueryBuilder/ConstantScoreQueryBuilder新增filter函数#17409、子聚合 filter 重写优化#17447。FilterFieldType#17627供开发者包装MappedFieldType。固定间隔 refresh 任务调度#17777、统一磁盘缓存管理器 Tiered caching#17513。XContentMapValues 的 dfs 变换函数#17612。主分片约束权重可调设置#16471、发布 checkpoint 事务重试超时集群设置#17749。四、Changed行为与默认值调整4.1 排序与相关性默认相似度切换为BM25Similarity#17306Lucene 中LegacyBM25Similarity已弃用OpenSearch 默认使用标准 BM25。不再最小化大小写不敏感匹配的 automata#17268以轻微内存/构建成本换取更快的查询执行。通配符字段只索引输入数据的 3-gram#17349降低通配符字段索引体积。4.2 索引与分段floor segment size 提升到 16MB#17699减少过小分段数量降低合并开销。默认maxMergesAtOnce提升到 30#17774force merge 线程数提升为核心数的 1/8#17255。副本提升时默认分段计数器步长增大#17568。4.3 集群与 APIlocale provider 从 COMPAT 切换为 CLDR#14345字符串排序、日期格式等行为可能与旧版本不同。create index API 对错误输入返回 400 而非 500#4773设置更新错误汇总消息改进#4792。并发快照执行失败返回 409 Conflict 而非 503#8986。NodesInfoRequest默认不再请求search_pipelines指标#12497。源字段显式匹配逻辑简化#17160指定明确字段名无通配符/点路径时使用更简单匹配。PEM 解析改用 BC 库#17393并将 BC 库迁移到 FIPS 对应版本#17507。TieredSpilloverCache 的 took-time 阈值同时作用于堆与磁盘层#17190。单例 DocValues 解包优化#17740、#17643提升 composite histogram 与 date histogram 聚合性能。jarHell 检查对可选扩展插件放宽#17893、transport-reactor-netty4迁移到 gradle version catalog#17233。4.4 面向 JPMS 的包重构3.0.0-beta1 集中消除了顶层 split package:libs模块bootstrap包重构#17117全代码库顶层 split package 消除#17153:server模块org.apache.lucene包重构#17241:server模块org.opensearch.client迁移为org.opensearch.transport.client#17272。重要影响客户端类包名从org.opensearch.client变更为org.opensearch.transport.client任何直接 import 这些类的扩展代码都需要同步修改。五、Deprecated 与 Removed废弃清理清单5.1 Deprecated本版本 Deprecated 章节为空——3.0.0-beta1 直接将大量能力放入 Removed 处理体现了 3.x 大版本一次性清算的策略。5.2 Removed 重点项版本常量与历史兼容层移除LegacyESVersion.V_7_0_*至V_7_10_*全部常量#2768、#4702、#4704、#4855、#4837、#5018以及Version.V_1_*常量#5021。Snapshot/Restore 服务移除 Legacy 版本支持#4728跨大版本恢复旧快照的能力被裁剪。移除废弃的gateway设置用于延迟集群恢复#3117。代码与 API移除org.opensearch.action.support.master包#4856。移除自定义 Map/List/Set 集合类#6871、废弃的管道聚合序列化逻辑#4847、未使用的私有方法#4926。移除日志 pattern 中节点名注入的废弃代码#4568、TransportClusterAllocationExplainAction中未用对象与 import#4639。移除FeatureFlags.PLUGGABLE_CACHE#17344与APPROXIMATE_POINT_RANGE_QUERY_SETTING#17769这两个特性已不再标记为实验性相关开关被删除。洪水阶段flood stageblock 始终自动释放#4703。六、Dependencies关键依赖升级一览Release Notes 列出 30 项依赖升级按影响面分类类别升级要点HTTP 栈HttpCore5/HttpClient5 升至 5.3.1/5.4.1#16757为 HttpAsyncClient 提供ExtendedSocketOptionjetty 9.4.55→9.4.57#17395运行环境主分支切换到 JDK 21 LTS#17515GRPCorg.opensearch:protobufs0.2.0→0.3.0#17888proto-google-common-protos2.37.1→2.54.1#17379reactor-netty 1.1.26→1.2.3#17322云 SDKAWS SDK 2.20.86→2.30.31#17396Azure storage-blob 12.28.1→12.30.0#17562Azure core 1.54.1→1.55.3#17810安全nimbus-jose-jwt 9.41.1→10.0.2#17607oauth2-oidc-sdk 11.21→11.23.1#17729解析/压缩gson 2.11.0→2.13.0#17229joni 2.2.1→2.2.6#17136jcodings 1.0.61→1.0.63#17560zstd-jni 1.5.5-1→1.5.6-1#17674json-smart 2.5.1→2.5.2#17378dnsjava 3.6.2→3.6.3#17231构建/日志awaitility 4.2.0→4.3.0logback-classic/core 1.5.16→1.5.18ant 1.10.14→1.10.15ospackage-base 11.10.1→11.11.2japicmp 0.4.5→0.4.6其他ingest-attachment 的 poi 5.2.5→5.4.1#17887CI 相关 tj-actions、lychee-action、dependabot-changelog-helper 等这些版本可以在 gradle/libs.versions.toml 中核对当前主线版本例如 AWS SDK、gson 等依赖的现网取值。七、Fixed3.0.0-beta1 修复的关键缺陷HTTP 客户端协议解析修复 JDK 16 下ParseException: Invalid protocol version#4827修复HeapBufferedAsyncEntityConsumer过度分配#9993。查询与聚合修复 terms 聚合 missing 值丢桶#17418修复 explain action 在查询重写时的问题#17286修复FunctionScoreQueryBuilder内部查询访问#16776修复 wildcard 大小写不敏感与转义查询#16827修复match_only_text字段通配符搜索高亮#17101。flat_object修复嵌套 flat_object 字段 exists 查询抛异常#16803。PIT / 统计修复创建 PIT 时的非法参数异常#16781修复 QueryGroupTasks 导致节点统计 NPE#17576修复_cat/recovery的 bytes 参数#17598修复 FeatureFlag 检查性能缓慢#17611修复 pull-based ingestion 分片恢复跳消息#17868。八、升级评估与迁移建议结合上文从 2.x 升级到 3.0.0-beta1及后续 3.x时建议按以下清单核对运行环境确认 JDK 21 已就绪distribution/src/config/jvm.options 等配置需按新版本重新核对。客户端包名若代码 import 了org.opensearch.client需迁移到org.opensearch.transport.client对应 server/src/main/java/org/opensearch/transport/client 下的实现。已删除设置检查配置文件中是否仍在使用mmap.extensions、废弃gateway设置、旧线程池设置、_bulk的batch_size等全部需要移除或替换。校验收紧_id超过 512 字节的写入、超过嵌套深度上限的查询、超限的 pipeline ID 在升级后会被拒绝需提前校验业务数据。行为变化CLDR locale、BM25 默认相似度、create index 错误码 400/409、search_pipelines指标默认关闭、快照并发冲突 409 等变化会影响自动化脚本与监控面板。新能力评估可结合业务场景评估 HTTP/2、pull-based IngestionKafka/Kinesis 插件、warm/search节点角色、Views、GRPC 端点与 Star Tree 加速是否值得引入。安全模型Java Agent 替代 SecurityManager 处于阶段化推进中涉及ThreadContextPermission的插件需要补充权限声明。参考本文引用的仓库关键路径Release Notes 原文release-notes/opensearch.release-notes-3.0.0-beta1.md依赖版本目录gradle/libs.versions.tomlHTTP 版本枚举server/src/main/java/org/opensearch/http/HttpRequest.java节点角色定义server/src/main/java/org/opensearch/cluster/node/DiscoveryNodeRole.javaViews 服务与 REST 入口ViewService.java、RestViewAction.javaJava Agent 安全策略PolicyFile.java、ThreadContextPermission.javaGRPC 模块modules/transport-grpcWLM 模块plugins/workload-management自动打标模块modules/autotagging-commonssystemd 配置distribution/packages/src/common【免费下载链接】OpenSearch Open source distributed and RESTful search engine.项目地址: https://gitcode.com/gh_mirrors/op/OpenSearch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表