Skip to content

Releases: appbaseio/reactivesearch-api

9.4.0

Choose a tag to compare

@siddharthlatest siddharthlatest released this 06 Jul 20:02
6bfe76b

Summary

Feature release adding RS_SETUP_PROFILE tiers for lean deployments against external Elasticsearch/OpenSearch clusters (as few as 4 primary shards). Also includes Render one-click deploy with minimal-profile defaults, nil-safe guards when optional meta indices are skipped, and a binary publish workflow fix for Packer AMI builds. Bumps the default version to 9.4.0.


New features

Setup profiles (RS_SETUP_PROFILE)

Control which meta (system) Elasticsearch indices are created at startup. Unset defaults to full (backward compatible).

Profile Primary shards (fresh install) Indexes created
minimal 4 .users, .permissions, .pipelines, .pipeline_vars
standard 12 minimal + .synonyms, .searchrelevancy, .logs, .pipeline_logs, .pipeline_invocations, .analytics, .user_sessions, .analytics_preferences
full ~35–48 All meta indexes (current behavior)
  • Central registryutil/setup_profile.go with ShouldCreateMetaIndex() gates index creation across all plugins.
  • Shard reductionMetaIndexShards() forces 1 primary shard per index on minimal and standard; full keeps per-plugin defaults.
  • JWT on lean profiles.publickey is not created on minimal / standard; set JWT_RSA_PUBLIC_KEY_LOC for JWT auth instead.
  • Example configconfig/minimal.env.example for local testing.
  • Smoke testsscripts/smoke-minimal.sh validates auth, pipelines, pipeline vars, and ES proxy under the minimal profile.

Render one-click deploy

  • render.yaml blueprint — Docker web service with RS_SETUP_PROFILE=minimal, health check at /arc/health.
  • README — Deploy to Render button and pairing guide with Aiven free OpenSearch for a free end-to-end stack.
  • ES_CLUSTER_URL, USERNAME, and PASSWORD are prompted at deploy time (sync: false).

Fixes

  • Nil-safe lean profiles — Guard against panics when optional meta indices are not created:
    • Nodes plugin: skip .nodes index init and cron jobs; /arc/_health returns health: ok without node counts.
    • Pipelines: skip invocation record writes when .pipeline_invocations is absent.
    • Analytics / applycache middleware: skip persistence and cache-stats rollover when respective indices are absent.
  • Binary publish workflow — Restore rs-linux-ami.zip / rs-linux-cluster.zip asset names expected by Packer AMI upgrade.sh.

Configuration

Variable Description
RS_SETUP_PROFILE minimal, standard, or full (default: full)
JWT_RSA_PUBLIC_KEY_LOC Load JWT public key from disk when .publickey index is not created

See docs/env-vars.md for full setup profile documentation.


Build & release

  • Default version bumped from 9.3.09.4.0 (Makefile, Dockerfile).

Upgrade notes

  • Existing deployments — No action required. Unset RS_SETUP_PROFILE keeps full behavior identical to 9.3.0.
  • New lean / demo deployments — Set RS_SETUP_PROFILE=minimal when pointing at a shared or free-tier OpenSearch cluster (e.g. Aiven + Render). Only 4 meta indices are created; features like analytics, logs, rules, cache, and node tracking are unavailable until you move to standard or full.
  • Health endpoints/arc/health (upstream cluster ping, no auth) and /arc/_health (ARC node health) both work on minimal; _health returns node_count: 0 since .nodes is not created.

9.3.0

Choose a tag to compare

@siddharthlatest siddharthlatest released this 13 Jun 10:30

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_flavor from GET / and caches the result for the process lifetime.
  • Meta index remapping — Dot-prefixed internal indices (e.g. .pipelines, .users, .analytics, .logs) are automatically rewritten to rs_* 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_PREFIX to 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_KEY to authenticate to upstream Elasticsearch with Authorization: ApiKey … (recommended for Serverless). ES_CLUSTER_URL must not contain embedded credentials when ES_API_KEY is 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.) via AdaptIndexBody.
  • Index size via _cat/indices — Reindex and rollover logic uses _cat/indices for store size where _stats is unavailable on Serverless. Adds ParseStoreSize for 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.09.3.0 (Makefile, Dockerfile).
  • Go build image updated from golang:1.26.0golang:1.26.4.
  • Binary publish workflow migrated to build from the OSS reactivesearch-api repo (drops confidential rs-api-server clone; packages build/ artifacts only).

9.2.0

Choose a tag to compare

@siddharthlatest siddharthlatest released this 22 Feb 16:52

Summary

Maintenance release with expanded GPT-5.2 and o-series model support, GitHub Actions model update, and Go base image upgrade.

Enhancements

  • Adds support for new OpenAI models released after GPT-5.1:
    • GPT-5.2 family: gpt-5.2, gpt-5.2-pro, gpt-5-pro with 400K context window
    • o-series reasoning models: o1, o3, o3-mini, o3-pro, o4-mini with 200K context window
  • Updates Code Review GPT workflow to use gpt-5 model

Chore

  • Update base build to use Go 1.26.0, bringing performance and security improvements

Upgrade notes

  • New GPT-5.2 models (gpt-5.2, gpt-5.2-pro, gpt-5-pro) are now supported with 400K token context windows. If you're using AI Answer or other OpenAI-powered features, these models are available alongside the existing GPT-5 family.
  • The o-series reasoning models (o1, o3, o3-mini, o3-pro, o4-mini) are now also supported with 200K token context windows. Note: OpenAI considers o3 and o4-mini as succeeded by gpt-5 and gpt-5-mini respectively, but they remain available in the API.

9.1.0

Choose a tag to compare

@siddharthlatest siddharthlatest released this 04 Dec 00:01

Summary

Maintenance release with GPT-5 model support, Docker base image update, and suggestion system refactoring.

Enhancements

  • Adds support for GPT-5 models including gpt-5, gpt-5-mini, gpt-5-nano, and gpt-5.1 with 400K context window

Refactoring

  • Remove Zinc dependency from FAQ, Popular, and Featured suggestions

Chore

  • Update base build to use Go 1.25.5, bringing performance and security improvements

Upgrade notes

  • GPT-5 family models are now supported with their full 400K token context windows. If you're using AI Answer or other OpenAI-powered features, you can now specify gpt-5, gpt-5-mini, gpt-5-nano, or gpt-5.1 as your model.

9.0.0

Choose a tag to compare

@siddharthlatest siddharthlatest released this 09 Sep 10:51

Summary

Major release with pipeline scalability improvements, OpenAI model updates, and Elasticsearch v9 compatibility.

Enhancements

  • feat(pipeline): add rollover for pipeline invocations (Jul 24, 2025)
  • change(pipeline): allow up to 1000 env vars (Jun 13, 2025)
  • update(openai): expand model support, including GPT‑5 and modern GPT‑4 variants (Sep 8, 2025)

Fixes

  • fix: add compatibility layer for range queries to work with Elasticsearch v9 (Aug 29, 2025)
  • fix(CI): run tests from module root to resolve internal package imports (Sep 8, 2025)
  • fix(ES v9): add escompat file for range query (Sep 8, 2025)

Chore

  • chore(build): increment release version (Jun 13, 2025)
  • chore(env): use REACTIVESEARCH_ID over APPBASE_ID (Aug 29, 2025)
  • chore(update): 9.0.0 (Sep 8, 2025)
  • chore(code-review): use gpt-5 model (Sep 8, 2025)
  • Merge branch updates into v9 and merge PR #167 (Sep 8, 2025)

Upgrade notes

  • Pipelines using environment variables can now configure up to 1000 entries.

8.24.2

Choose a tag to compare

@siddharthlatest siddharthlatest released this 10 Mar 15:51

Fixes

  • Dashboard analytics queries for pipeline when system index mapping may not be correctly set.

8.24.1

Choose a tag to compare

@siddharthlatest siddharthlatest released this 03 Mar 16:11

Changes

  • feat(vector search): inherit value for applying vector search when vectorDataField is specified but value or queryVector isn't set in the component. This is a common scenario with ReactiveSearch UI kit where SearchBox (for suggestions or as input for kNN searching) and ReactiveList (vector search) are used in tandem.
  • fix (suggestions): payload parsing where object is received
{
    "query": [
        {
            "id": "term",
            "type": "term",
            "dataField": "tags.keyword",
            "value": "Fashion",
            "execute": false
        },
        {
            "id": "one-line-search",
            "type": "search",
            "dataField": "one_liner",
            "value": "dresses",
            "execute": false
        },
        {
            "id": "search",
            "vectorDataField": "vector_data", // since no value or queryVector is provided, will get embedding for dresses and apply kNN search against vector_data field. Requires configuration of AI preferences for this to work
            "includeFields": [
                "name",
                "one_liner",
                "tags"
            ],
            "react": {
                "and": [
                    "term",
                    "one-line-search"
                ]
            }
        }
    ],
    "settings": {
        "useCache": false
    }
}

8.24.0

Choose a tag to compare

@siddharthlatest siddharthlatest released this 03 Feb 18:27

Enhancements

  • Adds support for approximate KNN (ANN) for Elasticsearch and OpenSearch in ReactiveSearch API. The same search endpoint allows faceting and text filtering alongside kNN vector search. Note: For OpenSearch, ANN requires lucene or faiss engines for use with faceting and text filtering.
  • When AI preferences are configured, setting queryVector in the API is optional

Example with ReactiveSearch API:

{
    "query": [
        {
            "id": "term",
            "type": "term",
            "dataField": "tags.keyword",
            "value": "Fashion",
            "execute": false
        },
        {
            "id": "one-line-search",
            "type": "search",
            "dataField": "one_liner",
            "value": "dresses",
            "execute": false
        },
        {
            "id": "search",
            "vectorDataField": "vector_data", // instead of "dataField" to indicate kNN search type
            "includeFields": [
                "name",
                "one_liner",
                "tags"
            ],
            "react": {
                "and": [
                    "term",
                    "one-line-search"
                ]
            },
            "value": "personalise"
        }
    ],
    "settings": {
        "useCache": false
    }
}

Using KNN when AI preferences are configured is as simple as setting vectorDataField instead of dataField. ReactiveSearch uses the AI preferences (embedding model configured, currently supports OpenAI) to generate a query vector from the user passed value. If AI preferences are not configured, queryVector is expected to be passed alongside.

Chore

  • Updates to Go 1.23.5 (latest current version)
  • Removes use of Sentry for remote error tracking

8.23.2

Choose a tag to compare

@siddharthlatest siddharthlatest released this 12 Dec 14:49

Fixes

  • Auth headers handling to strip RS auth when querying ES endpoints

8.23.1

Choose a tag to compare

@siddharthlatest siddharthlatest released this 05 Dec 16:10

Fixes

  • Updates synonyms index to avoid conflict with Elasticsearch's internal index.