Summary
Feature release adding Elasticsearch Serverless support, including API key upstream authentication, automatic meta index remapping, Serverless-compatible index operations, and client-side index rollover. Also bumps the default version to 9.3.0 and updates the Go build image to 1.26.4.
New features
Elasticsearch Serverless support
ReactiveSearch API can now run against Elasticsearch Serverless clusters.
- Automatic Serverless detection — Detects Serverless via
version.build_flavorfromGET /and caches the result for the process lifetime. - Meta index remapping — Dot-prefixed internal indices (e.g.
.pipelines,.users,.analytics,.logs) are automatically rewritten tors_*names (e.g.rs_pipelines,rs_users), since Serverless rejects user-created hidden indices. All plugins that use meta indices are updated to resolve names through this layer. - Configurable prefix — Set
RS_META_INDEX_PREFIXto force an alternate prefix on any cluster (must not start with_,-, or+). When unset, remapping applies only on Serverless. - API key upstream auth — Set
ES_API_KEYto authenticate to upstream Elasticsearch withAuthorization: ApiKey …(recommended for Serverless).ES_CLUSTER_URLmust not contain embedded credentials whenES_API_KEYis set. Basic auth via URL credentials remains supported for self-managed clusters. - Serverless-compatible index creation — Strips platform-managed settings from index creation bodies on Serverless (
index.hidden, shard/replica counts,auto_expand_replicas, etc.) viaAdaptIndexBody. - Index size via
_cat/indices— Reindex and rollover logic uses_cat/indicesfor store size where_statsis unavailable on Serverless. AddsParseStoreSizefor human-readable size strings (1.2kb,100mb, etc.). - Client-side index rollover — Serverless rejects conditional rollover (
max_age,max_docs,max_size) in the API body. On Serverless, ReactiveSearch evaluates those thresholds client-side and calls rollover without conditions when any threshold is met (OR semantics). Applies to analytics, logs, pipeline logs, and pipeline invocations. Cron schedules (@midnight,@hourly) and post-rollover cleanup (retain latest two backing indices) are unchanged.
Rollover thresholds (Serverless defaults)
| Meta index | max_age (non-production)
| max_age (production)
|
|---|---|---|
rs_analytics
| 30 days | 30 days |
rs_logs
| 7 days | 30 days |
rs_pipeline_logs
| 7 days | 30 days |
rs_pipeline_invocations
| 3 days | 7 days |
Configuration
| Variable | Description |
|---|---|
ES_API_KEY
| API key for upstream Elasticsearch auth (e.g. Serverless). Mutually exclusive with credentials in ES_CLUSTER_URL.
|
RS_META_INDEX_PREFIX
| Force meta index prefix (e.g. rs_) on any cluster; auto-applied on Serverless when unset.
|
See docs/env-vars.md for full details on meta index naming and Serverless rollover behavior.
Build & release
- Default version bumped from 9.2.0 → 9.3.0 (
Makefile,Dockerfile). - Go build image updated from golang:1.26.0 → golang:1.26.4.
- Binary publish workflow migrated to build from the OSS
reactivesearch-apirepo (drops confidentialrs-api-serverclone; packagesbuild/artifacts only).