> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tensor9.com/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenSearch Domain

> OpenSearch Domain APIs with Cloud Adapter.

This page describes how OpenSearch Domain maps to services in the environment where the application runs, including backend choices, supported operations and service-specific behavior.

## Supported environments

* Akamai
* Azure
* DigitalOcean
* Google Cloud
* OCI
* Private Kubernetes
* Scaleway

Check the operation and capability tables for the behavior your application depends on. A supported environment does not imply that every operation of the origin service is available.

## How the backends compare

Each row compares a capability of OpenSearch Domain with its adaptation on each backend.
A dash means this profile does not state the capability for that backend.

### Cloud Adapter

| Capability | OpenSearch Domain | Akamai, Azure, DigitalOcean, Google Cloud, Private Kubernetes, and Scaleway · OpenSearch | Azure · Azure Native Elastic | DigitalOcean · OpenSearch Domain | DigitalOcean and Scaleway · Lucenia (self-hosted) | DigitalOcean and Google Cloud · Elastic Cloud (managed) | DigitalOcean · DigitalOcean Managed OpenSearch | OCI | Scaleway · Scaleway Cloud Essentials for OpenSearch |
| - | - | - | - | - | - | - | - | - | - |
| OpenSearch REST API | OpenSearch / Elasticsearch REST | native OpenSearch API; match engine and client versions | adapter-translated OpenSearch requests on Elasticsearch 8.x | - | native OpenSearch API; match engine and client versions | adapter-translated OpenSearch requests on Elasticsearch 8.x | native OpenSearch API; match engine and client versions | native OpenSearch API; match engine and client versions | native OpenSearch API; match engine and client versions |
| Engine + version | OpenSearch (AWS-managed domain) | OpenSearch (self-hosted; OpenSearch Operator / Helm chart) | Elasticsearch 8.x (Elastic-managed via Azure Native ISV Service) | - | Lucenia (OpenSearch-2.14-derived fork; API ≈ 2.18; early-stage 0.x) | Elasticsearch 8.x (Elastic Cloud Hosted) | OpenSearch 2.19 (DigitalOcean-managed) | OpenSearch 2.11 / 2.15 / 2.18 / 2.19.1 / 3.2 / 3.6 (OCI-managed) | OpenSearch 2.0 (the only version Scaleway offers; EOL 2027-06-06) |
| Durability / HA owner · who operates the cluster | AWS-managed domain | you (self-managed on Kubernetes) | Elastic / Microsoft (Azure Native Elastic) | - | you (self-managed on Kubernetes, Lucenia Helm chart) | Elastic (Elastic Cloud) | DigitalOcean (Managed OpenSearch) | Oracle (OCI Search with OpenSearch) | Scaleway (Cloud Essentials for OpenSearch) |
| Cluster topology / sharding | data + dedicated-master + UltraWarm tiers | nodePools you define (data + dedicated cluster\_manager + optional warm role) | resource without topology fields - size in the Elastic console (default 16 GB / 560 GB / 2 AZ) | - | nodePools (data + master) you define | ec\_deployment full topology: hot/warm/cold/frozen tiers, size + zone\_count (1-3) | no dedicated-master tier - 1-15 nodes (GP/Mem: 1/3/6/9/15; Basic: 1 or 3) | mandatory 3-tier: data + leader (master) + Dashboard nodes; optional coordinator / ML / search tiers | no dedicated-master tier; node\_count nodes of one type, 2 vCPU / 8 GB up to 8 vCPU / 32 GB |
| Replication / HA · replicas + failover | Multi-AZ (up to 99.99% with standby) | index replicas + shard allocation awareness you configure; no SLA | governed by the Elastic Cloud SLA (99.5 / 99.9 / 99.95% by AZ count) | - | you configure; no SLA | 99.5 / 99.9 / 99.95% by AZ count (1 / 2 / 3 zones) | add a standby for HA; the DO Managed Databases SLA is 99.95% (with standby) / 99.5% (without) | OCI spreads data nodes across availability domains; no published availability SLA | the managed deployment's own - the AWS Multi-AZ standby model has no counterpart here |
| Storage | EBS gp3 (to 36 TiB/node) / 3 PiB per domain | PersistentVolume per nodePool (diskSize / storageClass); IOPS is StorageClass-derived | included in the plan (no topology field on the resource) | - | PersistentVolume (persistence.size / storageClass) | disk bundled at a fixed disk:RAM ratio per tier | managed (10 GiB increments; size slug) | per-node data\_node\_storage\_gb (FLEX sizing; up to \~314 TB/node, OCPU 1-32, memory 20-1024 GB) | sbs\_5k NVMe only, from a 5 GB floor to 10 TB, allocated in 5 GB steps |
| Encryption at rest | encrypt\_at\_rest + KMS CMK | the PersistentVolume / StorageClass encryption (no AWS-KMS CMK analog) | Elastic-managed | - | StorageClass encryption | Elastic-managed (CMK is an EC Enterprise feature) | LUKS at rest, always on (no BYOK) | service-managed encryption; no per-domain AWS KMS customer-key setting in this mapping | Scaleway's own storage encryption (the AWS KMS CMK has no counterpart) |
| Security / FGAC | fine-grained access control + IAM policies | the Security plugin, config + internal\_users you own | Elastic native realm / API keys / SSO, not the OpenSearch Security plugin | - | SSPL security component; LUCENIA\_INITIAL\_ADMIN\_PASSWORD | Elastic native realm (security.enabled), not the OpenSearch Security plugin | Security plugin present but only the doadmin user via DO | OpenSearch Security plugin - security\_mode ENFORCING + master user; SAML/LDAP/OIDC; DLS/FLS (2.3+) | Security plugin present; ONE user\_name/password from Scaleway, roles configured inside OpenSearch |
| Plugins (k-NN / SQL / ISM / Alerting / ML) | bundled \_plugins/\* (Apache-2.0) | the full bundled \_plugins/\* set (k-NN, SQL/PPL, ISM, Alerting, AD, ML Commons) | ES-native (\_ml, \_watcher, dense\_vector); the OpenSearch \_plugins/\* APIs diverge (k-NN/SQL adapter-served, PPL/security out of scope) | - | k-NN / vector confirmed (HNSW/IVF/Faiss, hybrid BM25+vector); full \_plugins/\* parity (SQL/PPL/ISM/AD/ML) not independently verified | ES-native; the OpenSearch \_plugins/\* APIs diverge | k-NN + Neural + SQL/PPL + ISM + Alerting/AD/ML bundled | the full supported set: k-NN, SQL/PPL, ISM, Alerting, AD, ML Commons, Neural Search, Security Analytics | k-NN + Neural + SQL/PPL + ISM + Alerting/AD/ML all present |
| Snapshots / backups | managed automated + manual \_snapshot | self-managed: register a snapshot repository + schedule OpenSearch Snapshot Management | Elastic SLM (console) | - | self-managed | Elastic SLM (snapshot.retention) | managed hourly (24h) + daily (3d) + 7-day PITR | managed daily backups (14-day, non-configurable) + manual Snapshot API to Object Storage | Scaleway's own backups; AWS managed snapshots are not carried across |
| API coverage | full | high | partial | full | partial | partial | high | high | high |
| The deployment is public until you attach a Private Network · the one to read first | vpc\_options placing the domain in your VPC | - | - | - | - | - | - | - | a public endpoint, until a Private Network is attached |
| There is exactly one version, and it may be a major step · 2.0 | your domain's engine\_version | - | - | - | - | - | - | - | OpenSearch 2.0 (EOL 2027-06-06) |
| Node size is a floor, not a translation · and the ceiling is low | r6g.large.search and the rest of the AWS search families | - | - | - | - | - | - | - | SEARCHDB-SHARED-2C-8G (2 vCPU / 8 GB) |
| Scaleway flags every node type beta · its assessment, not ours | a GA AWS service | - | - | - | - | - | - | - | beta node types on a v1alpha1 API |
| Volume size rounds UP; IOPS is not tunable · sbs\_5k only | EBS gp3 with tunable IOPS and throughput | - | - | - | - | - | - | - | sbs\_5k (NVMe, 5K IOPS), 5 GB steps from a 5 GB floor |

## On Akamai, Azure, DigitalOcean, Google Cloud, Private Kubernetes, and Scaleway

### OpenSearch

| Operation | Area | Support | Depth | Notes |
| - | - | - | - | - |
| Cluster health / stats / \_cat APIs | Cluster | Supported | Most usage | - |
| Tasks API (\_tasks) | Cluster | Supported | Full surface | drives async reindex / update-by-query |
| Bulk (\_bulk) | Documents | Supported | Common | batch index/update/delete |
| Delete document | Documents | Supported | Common | - |
| Get document (GET /\{index}/\_doc/\{id}) | Documents | Supported | Common | - |
| Index document (PUT/POST /\{index}/\_doc) | Documents | Supported | Common | - |
| Multi-get (\_mget) | Documents | Supported | Most usage | - |
| Update document (\_update) | Documents | Supported | Common | - |
| Snapshots / backups (\_snapshot) | Durability | Partial | Full surface | the \_snapshot API is native, but you register the repository and schedule snapshots with OpenSearch Snapshot Management that AWS managed for you |
| Aliases (\_aliases) | Index management | Supported | Most usage | - |
| Analyze (\_analyze) | Index management | Supported | Full surface | tokenizer/analyzer testing |
| Create / Delete / Get index | Index management | Supported | Common | - |
| Data streams (\_data\_stream) | Index management | Supported | Full surface | - |
| Open / Close index | Index management | Supported | Full surface | - |
| Put / Get mapping | Index management | Supported | Common | - |
| Refresh / Flush / Forcemerge | Index management | Supported | Most usage | - |
| Rollover / Shrink / Split / Clone | Index management | Supported | Full surface | - |
| Update / Get settings | Index management | Supported | Most usage | - |
| Index & component templates (\_index\_template / \_component\_template) | Ingest & templates | Supported | Full surface | - |
| Ingest pipelines (\_ingest/pipeline: put / get / delete / \_simulate) | Ingest & templates | Supported | Full surface | - |
| License / X-Pack (\_license, \_xpack) | Licensing | Out of scope | Full surface | Elasticsearch licensing endpoints \_license and \_xpack are not OpenSearch APIs. |
| Index State Management (\_plugins/\_ism) | Lifecycle | Supported | Full surface | Index State Management (\_plugins/\_ism) is bundled |
| Alerting / anomaly detection / ML Commons (\_plugins/\*) | Observability & ML | Supported | Full surface | Alerting, Anomaly Detection, ML Commons, Notifications, Observability all ship in the distribution |
| Notifications / observability (\_plugins/\_notifications, \_plugins/\_observability) | Observability & ML | Supported | Full surface | Alerting, Anomaly Detection, ML Commons, Notifications, Observability all ship in the distribution |
| PPL (\_plugins/\_ppl) | Query languages | Supported | Full surface | PPL (\_plugins/\_ppl) is bundled |
| SQL (\_plugins/\_sql) | Query languages | Supported | Full surface | the SQL plugin (\_plugins/\_sql) is bundled |
| Stored scripts & Painless (\_scripts, \_scripts/painless/\_execute) | Scripting | Supported | Full surface | - |
| Aggregations | Search | Supported | Common | metrics + bucket aggregations in \_search |
| Count / Explain / Suggest | Search | Supported | Most usage | - |
| Field capabilities (\_field\_caps) | Search | Supported | Full surface | - |
| Multi-search (\_msearch) | Search | Supported | Most usage | - |
| Point-in-time (\_search/point\_in\_time) | Search | Supported | Most usage | native - same \_search/point\_in\_time endpoint |
| Reindex / Update-by-query / Delete-by-query | Search | Supported | Full surface | - |
| Scroll (\_search/scroll) | Search | Supported | Most usage | deep pagination |
| Search (\_search + query DSL) | Search | Supported | Common | - |
| Search templates (\_search/template, \_render/template) | Search | Supported | Full surface | - |
| Term vectors (\_termvectors / \_mtermvectors) | Search | Supported | Full surface | - |
| Security plugin / fine-grained access control (\_plugins/\_security) | Security | Partial | Full surface | the Security plugin runs natively (the full plugin API, more than a managed backend exposes), but you now own the roles/mappings/internal-users config that AWS FGAC managed, the same ownership shift as snapshots |
| Vector search / k-NN (knn\_vector, \_plugins/\_knn) | Vector & ML | Supported | Full surface | the k-NN plugin (knn\_vector + \_plugins/\_knn) is bundled in the OpenSearch distribution |

#### How it works

Tensor9 provisions OpenSearch in your Kubernetes cluster, through an `OpenSearchCluster` resource or a Helm chart, and points your application at its endpoint. Your OpenSearch client sends document and search requests straight to the cluster's OpenSearch API; nothing from Tensor9 sits in between. You operate the cluster and its storage.

![Your application's OpenSearch requests go straight to the OpenSearch cluster on Kubernetes through its endpoint, which Tensor9 provisions and configures.](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTAwIiBoZWlnaHQ9IjE4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOTAwIDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJZb3VyIGFwcGxpY2F0aW9uJ3MgT3BlblNlYXJjaCByZXF1ZXN0cyBnbyBzdHJhaWdodCB0byB0aGUgT3BlblNlYXJjaCBjbHVzdGVyIG9uIEt1YmVybmV0ZXMgdGhyb3VnaCBpdHMgZW5kcG9pbnQsIHdoaWNoIFRlbnNvcjkgcHJvdmlzaW9ucyBhbmQgY29uZmlndXJlcy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ib3Mtcm91dGUiIG1hcmtlcldpZHRoPSI4IiBtYXJrZXJIZWlnaHQ9IjgiIHJlZlg9IjciIHJlZlk9IjQiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAsMCBMOCw0IEwwLDggWiIgc3R5bGU9ImZpbGw6IzY0NzQ4YiIvPjwvbWFya2VyPjwvZGVmcz4KPGcgc3R5bGU9InN0cm9rZTojOTRhM2I4Ij48cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIyNDAiIGhlaWdodD0iMTAwIiByeD0iMTAiIHN0eWxlPSJmaWxsOiNmOGZhZmMiLz48cmVjdCB4PSIzMzAiIHk9IjQwIiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjEwMCIgcng9IjEwIiBzdHlsZT0iZmlsbDojZjhmYWZjIi8+PHJlY3QgeD0iNjQwIiB5PSI0MCIgd2lkdGg9IjI0MCIgaGVpZ2h0PSIxMDAiIHJ4PSIxMCIgc3R5bGU9ImZpbGw6I2Y4ZmFmYyIvPjwvZz4KPGcgZm9udC1mYW1pbHk9InN5c3RlbS11aSxzYW5zLXNlcmlmIiBmb250LXNpemU9IjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZmlsbDojMGYxNzJhIj48dGV4dCB4PSIxNDAiIHk9Ijc4Ij5Zb3VyIGFwcGxpY2F0aW9uPC90ZXh0Pjx0ZXh0IHg9IjQ1MCIgeT0iNzgiPkNsdXN0ZXIgZW5kcG9pbnQ8L3RleHQ+PHRleHQgeD0iNzYwIiB5PSI3OCI+T3BlblNlYXJjaCBvbiBLdWJlcm5ldGVzPC90ZXh0PjwvZz4KPGcgZm9udC1mYW1pbHk9InN5c3RlbS11aSxzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZmlsbDojMzM0MTU1Ij48dGV4dCB4PSIxNDAiIHk9IjEwOCI+T3BlblNlYXJjaCBjbGllbnQ8L3RleHQ+PHRleHQgeD0iNDUwIiB5PSIxMDgiPlNldCB1cCBieSBUZW5zb3I5PC90ZXh0Pjx0ZXh0IHg9Ijc2MCIgeT0iMTA4Ij5JbmRleGVzIGFuZCBzZWFyY2g8L3RleHQ+PC9nPgo8ZyBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjb3Mtcm91dGUpIiBzdHlsZT0ic3Ryb2tlOiM2NDc0OGIiPjxwYXRoIGQ9Ik0yNjAgOTAgSDMyNSIvPjxwYXRoIGQ9Ik01NzAgOTAgSDYzNSIvPjwvZz4KPC9zdmc+)

![Your application's OpenSearch requests go straight to the OpenSearch cluster on Kubernetes through its endpoint, which Tensor9 provisions and configures.](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTAwIiBoZWlnaHQ9IjE4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOTAwIDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJZb3VyIGFwcGxpY2F0aW9uJ3MgT3BlblNlYXJjaCByZXF1ZXN0cyBnbyBzdHJhaWdodCB0byB0aGUgT3BlblNlYXJjaCBjbHVzdGVyIG9uIEt1YmVybmV0ZXMgdGhyb3VnaCBpdHMgZW5kcG9pbnQsIHdoaWNoIFRlbnNvcjkgcHJvdmlzaW9ucyBhbmQgY29uZmlndXJlcy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ib3Mtcm91dGUiIG1hcmtlcldpZHRoPSI4IiBtYXJrZXJIZWlnaHQ9IjgiIHJlZlg9IjciIHJlZlk9IjQiIG9yaWVudD0iYXV0byI+PHBhdGggZD0iTTAsMCBMOCw0IEwwLDggWiIgc3R5bGU9ImZpbGw6Izk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPGcgc3R5bGU9InN0cm9rZTojNjQ3NDhiIj48cmVjdCB4PSIyMCIgeT0iNDAiIHdpZHRoPSIyNDAiIGhlaWdodD0iMTAwIiByeD0iMTAiIHN0eWxlPSJmaWxsOiMwZjE3MmEiLz48cmVjdCB4PSIzMzAiIHk9IjQwIiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjEwMCIgcng9IjEwIiBzdHlsZT0iZmlsbDojMGYxNzJhIi8+PHJlY3QgeD0iNjQwIiB5PSI0MCIgd2lkdGg9IjI0MCIgaGVpZ2h0PSIxMDAiIHJ4PSIxMCIgc3R5bGU9ImZpbGw6IzBmMTcyYSIvPjwvZz4KPGcgZm9udC1mYW1pbHk9InN5c3RlbS11aSxzYW5zLXNlcmlmIiBmb250LXNpemU9IjE3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZmlsbDojZjFmNWY5Ij48dGV4dCB4PSIxNDAiIHk9Ijc4Ij5Zb3VyIGFwcGxpY2F0aW9uPC90ZXh0Pjx0ZXh0IHg9IjQ1MCIgeT0iNzgiPkNsdXN0ZXIgZW5kcG9pbnQ8L3RleHQ+PHRleHQgeD0iNzYwIiB5PSI3OCI+T3BlblNlYXJjaCBvbiBLdWJlcm5ldGVzPC90ZXh0PjwvZz4KPGcgZm9udC1mYW1pbHk9InN5c3RlbS11aSxzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZmlsbDojY2JkNWUxIj48dGV4dCB4PSIxNDAiIHk9IjEwOCI+T3BlblNlYXJjaCBjbGllbnQ8L3RleHQ+PHRleHQgeD0iNDUwIiB5PSIxMDgiPlNldCB1cCBieSBUZW5zb3I5PC90ZXh0Pjx0ZXh0IHg9Ijc2MCIgeT0iMTA4Ij5JbmRleGVzIGFuZCBzZWFyY2g8L3RleHQ+PC9nPgo8ZyBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjb3Mtcm91dGUpIiBzdHlsZT0ic3Ryb2tlOiM5NGEzYjgiPjxwYXRoIGQ9Ik0yNjAgOTAgSDMyNSIvPjxwYXRoIGQ9Ik01NzAgOTAgSDYzNSIvPjwvZz4KPC9zdmc+)

#### Engine and plugins

The cluster runs the OpenSearch engine with its bundled plugins, so the listed document, index, search, aggregation, ingest and scripting operations keep their OpenSearch APIs. The distribution includes k-NN vector search, SQL, PPL, Index State Management, Alerting, Anomaly Detection and ML Commons, and their `_plugins` APIs run on the cluster.

Match the engine and plugin versions to the ones your application uses on AWS. Two deployments of the same engine are not identical if their versions differ.

#### Topology and access

You define node pools with CPU, memory and PersistentVolume capacity. A dedicated `cluster_manager` pool keeps the cluster quorum: use at least three eligible nodes and spread replicas across failure domains. (OpenSearch renamed the master role to `cluster_manager` in version 2.0.) Configure shard allocation and plan rolling upgrades for your version.

The OpenSearch Security plugin controls roles, role mappings and internal users, including SAML, OIDC or LDAP sign-in where supported, and document- or field-level access. You translate your AWS IAM-based access rules into this configuration.

#### Storage and backups

PersistentVolumes and their StorageClasses set disk capacity, IOPS and encryption. Availability depends on node placement, quorum and index replicas.

Register a snapshot repository, and schedule snapshots and their retention with OpenSearch Snapshot Management (not the same feature as Elasticsearch Snapshot Lifecycle Management). An S3-compatible repository needs the `repository-s3` plugin and the object store's endpoint settings. Keep backups outside the cluster's failure domain, and test a restore.

#### Limitations

* **A managed uptime SLA is not available.** The cluster is self-managed. Tensor9 provisions it and its endpoint, but adds no managed durability guarantee; availability is what your placement, quorum and replicas provide.
* **AWS IAM access control is not supported.** You must express access rules in the OpenSearch Security plugin's roles, role mappings and users.
* **Encryption behaves differently: AWS KMS key settings are not kept.** Encryption at rest comes from the StorageClass of the PersistentVolumes, not from a domain's AWS KMS key.
* **Elasticsearch licensing APIs are not supported.** `_license` and `_xpack` are Elasticsearch endpoints, not OpenSearch APIs.

#### Other considerations

**Before going live.** Replace the bootstrap certificates and default credentials before you expose the cluster.

**Moving from AWS.** The cluster starts empty. Restore a compatible snapshot or reindex from the source, then check index mappings and queries before cutover. Size shards, replicas and storage for your workload; shard sizes in the tens of gigabytes are a starting point to evaluate, not a fixed limit.

**What you operate.** You run Kubernetes capacity, storage expansion, cluster health, upgrades and snapshots.

## On Azure

### Azure Native Elastic

| Operation | Area | Support | Depth | Notes |
| - | - | - | - | - |
| Cluster health / stats / \_cat APIs | Cluster | Supported | Most usage | - |
| Tasks API (\_tasks) | Cluster | Supported | Full surface | drives async reindex / update-by-query |
| Bulk (\_bulk) | Documents | Supported | Common | batch index/update/delete |
| Delete document | Documents | Supported | Common | - |
| Get document (GET /\{index}/\_doc/\{id}) | Documents | Supported | Common | - |
| Index document (PUT/POST /\{index}/\_doc) | Documents | Supported | Common | - |
| Multi-get (\_mget) | Documents | Supported | Most usage | - |
| Update document (\_update) | Documents | Supported | Common | - |
| Snapshots / backups (\_snapshot) | Durability | Partial | Full surface | Elastic SLM - a different API |
| Aliases (\_aliases) | Index management | Supported | Most usage | - |
| Analyze (\_analyze) | Index management | Supported | Full surface | tokenizer/analyzer testing |
| Create / Delete / Get index | Index management | Supported | Common | - |
| Data streams (\_data\_stream) | Index management | Supported | Full surface | - |
| Open / Close index | Index management | Supported | Full surface | - |
| Put / Get mapping | Index management | Supported | Common | - |
| Refresh / Flush / Forcemerge | Index management | Supported | Most usage | - |
| Rollover / Shrink / Split / Clone | Index management | Supported | Full surface | - |
| Update / Get settings | Index management | Supported | Most usage | - |
| Index & component templates (\_index\_template / \_component\_template) | Ingest & templates | Supported | Full surface | - |
| Ingest pipelines (\_ingest/pipeline: put / get / delete / \_simulate) | Ingest & templates | Supported | Full surface | - |
| License / X-Pack (\_license, \_xpack) | Licensing | Out of scope | Full surface | Elasticsearch licensing endpoints are outside the OpenSearch mapping. |
| Index State Management (\_plugins/\_ism) | Lifecycle | Adapter-served | Full surface | Maps representable ISM actions to ILM phases; custom states and transitions cannot round-trip. |
| Alerting / anomaly detection / ML Commons (\_plugins/\*) | Observability & ML | Adapter-served | Full surface | ES-native \_ml/\_watcher, several Platinum-gated; notifications/observability have no ES REST equivalent |
| Notifications / observability (\_plugins/\_notifications, \_plugins/\_observability) | Observability & ML | Out of scope | Full surface | These OpenSearch APIs are outside the Elasticsearch mapping; use backend-native configuration or change the application. |
| PPL (\_plugins/\_ppl) | Query languages | Out of scope | Full surface | no PPL in Elasticsearch; ES\|QL is a different language |
| SQL (\_plugins/\_sql) | Query languages | Adapter-served | Full surface | ES \_sql at a different path/shape |
| Stored scripts & Painless (\_scripts, \_scripts/painless/\_execute) | Scripting | Supported | Full surface | - |
| Aggregations | Search | Supported | Common | metrics + bucket aggregations in \_search |
| Count / Explain / Suggest | Search | Supported | Most usage | - |
| Field capabilities (\_field\_caps) | Search | Supported | Full surface | - |
| Multi-search (\_msearch) | Search | Supported | Most usage | - |
| Point-in-time (\_search/point\_in\_time) | Search | Partial | Most usage | ES uses \_pit, not \_search/point\_in\_time - path rewrite |
| Reindex / Update-by-query / Delete-by-query | Search | Supported | Full surface | - |
| Scroll (\_search/scroll) | Search | Supported | Most usage | deep pagination |
| Search (\_search + query DSL) | Search | Supported | Common | - |
| Search templates (\_search/template, \_render/template) | Search | Supported | Full surface | - |
| Term vectors (\_termvectors / \_mtermvectors) | Search | Supported | Full surface | - |
| Security plugin / fine-grained access control (\_plugins/\_security) | Security | Out of scope | Full surface | disjoint API + model - \_security/\* vs \_plugins/\_security/\*; some OpenSearch-free FLS/DLS/multi-tenancy are Platinum-gated or absent on ES |
| Vector search / k-NN (knn\_vector, \_plugins/\_knn) | Vector & ML | Adapter-served | Full surface | rewrite knn\_vector→dense\_vector, OpenSearch knn query→ES knn option |

#### How it works

Your application keeps its OpenSearch client. Its requests go to a Tensor9 adapter, which translates the supported APIs and authentication and sends them to a managed Elasticsearch 8.x endpoint on Azure Native Elastic. Tensor9 creates the Elastic resource in the customer's Azure tenant through the Azure Native integration. Elastic operates Elasticsearch, and the resource is bought and billed through the customer's Azure subscription.

![Your app's OpenSearch requests go to the Tensor9 adapter, which translates supported APIs and authentication and sends them to Azure Native Elastic.](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTAwIiBoZWlnaHQ9IjE4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOTAwIDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJZb3VyIGFwcCdzIE9wZW5TZWFyY2ggcmVxdWVzdHMgZ28gdG8gdGhlIFRlbnNvcjkgYWRhcHRlciwgd2hpY2ggdHJhbnNsYXRlcyBzdXBwb3J0ZWQgQVBJcyBhbmQgYXV0aGVudGljYXRpb24gYW5kIHNlbmRzIHRoZW0gdG8gQXp1cmUgTmF0aXZlIEVsYXN0aWMuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9Im9zLXJvdXRlIiBtYXJrZXJXaWR0aD0iOCIgbWFya2VySGVpZ2h0PSI4IiByZWZYPSI3IiByZWZZPSI0IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wLDAgTDgsNCBMMCw4IFoiIHN0eWxlPSJmaWxsOiM2NDc0OGIiLz48L21hcmtlcj48L2RlZnM+CjxnIHN0eWxlPSJzdHJva2U6Izk0YTNiOCI+PHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjEwMCIgcng9IjEwIiBzdHlsZT0iZmlsbDojZjhmYWZjIi8+PHJlY3QgeD0iMzMwIiB5PSI0MCIgd2lkdGg9IjI0MCIgaGVpZ2h0PSIxMDAiIHJ4PSIxMCIgc3R5bGU9ImZpbGw6I2Y4ZmFmYyIvPjxyZWN0IHg9IjY0MCIgeT0iNDAiIHdpZHRoPSIyNDAiIGhlaWdodD0iMTAwIiByeD0iMTAiIHN0eWxlPSJmaWxsOiNmOGZhZmMiLz48L2c+CjxnIGZvbnQtZmFtaWx5PSJzeXN0ZW0tdWksc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZpbGw6IzBmMTcyYSI+PHRleHQgeD0iMTQwIiB5PSI3OCI+WW91ciBhcHA8L3RleHQ+PHRleHQgeD0iNDUwIiB5PSI3OCI+VGVuc29yOSBhZGFwdGVyPC90ZXh0Pjx0ZXh0IHg9Ijc2MCIgeT0iNzgiPkF6dXJlIE5hdGl2ZSBFbGFzdGljPC90ZXh0PjwvZz4KPGcgZm9udC1mYW1pbHk9InN5c3RlbS11aSxzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZmlsbDojMzM0MTU1Ij48dGV4dCB4PSIxNDAiIHk9IjEwOCI+T3BlblNlYXJjaCBjbGllbnQ8L3RleHQ+PHRleHQgeD0iNDUwIiB5PSIxMDgiPlRyYW5zbGF0ZXMgcmVxdWVzdHMsIGF1dGg8L3RleHQ+PHRleHQgeD0iNzYwIiB5PSIxMDgiPkluZGV4ZXMgYW5kIHNlYXJjaDwvdGV4dD48L2c+CjxnIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNvcy1yb3V0ZSkiIHN0eWxlPSJzdHJva2U6IzY0NzQ4YiI+PHBhdGggZD0iTTI2MCA5MCBIMzI1Ii8+PHBhdGggZD0iTTU3MCA5MCBINjM1Ii8+PC9nPgo8L3N2Zz4=)

![Your app's OpenSearch requests go to the Tensor9 adapter, which translates supported APIs and authentication and sends them to Azure Native Elastic.](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTAwIiBoZWlnaHQ9IjE4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOTAwIDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJZb3VyIGFwcCdzIE9wZW5TZWFyY2ggcmVxdWVzdHMgZ28gdG8gdGhlIFRlbnNvcjkgYWRhcHRlciwgd2hpY2ggdHJhbnNsYXRlcyBzdXBwb3J0ZWQgQVBJcyBhbmQgYXV0aGVudGljYXRpb24gYW5kIHNlbmRzIHRoZW0gdG8gQXp1cmUgTmF0aXZlIEVsYXN0aWMuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9Im9zLXJvdXRlIiBtYXJrZXJXaWR0aD0iOCIgbWFya2VySGVpZ2h0PSI4IiByZWZYPSI3IiByZWZZPSI0IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wLDAgTDgsNCBMMCw4IFoiIHN0eWxlPSJmaWxsOiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxnIHN0eWxlPSJzdHJva2U6IzY0NzQ4YiI+PHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjEwMCIgcng9IjEwIiBzdHlsZT0iZmlsbDojMGYxNzJhIi8+PHJlY3QgeD0iMzMwIiB5PSI0MCIgd2lkdGg9IjI0MCIgaGVpZ2h0PSIxMDAiIHJ4PSIxMCIgc3R5bGU9ImZpbGw6IzBmMTcyYSIvPjxyZWN0IHg9IjY0MCIgeT0iNDAiIHdpZHRoPSIyNDAiIGhlaWdodD0iMTAwIiByeD0iMTAiIHN0eWxlPSJmaWxsOiMwZjE3MmEiLz48L2c+CjxnIGZvbnQtZmFtaWx5PSJzeXN0ZW0tdWksc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZpbGw6I2YxZjVmOSI+PHRleHQgeD0iMTQwIiB5PSI3OCI+WW91ciBhcHA8L3RleHQ+PHRleHQgeD0iNDUwIiB5PSI3OCI+VGVuc29yOSBhZGFwdGVyPC90ZXh0Pjx0ZXh0IHg9Ijc2MCIgeT0iNzgiPkF6dXJlIE5hdGl2ZSBFbGFzdGljPC90ZXh0PjwvZz4KPGcgZm9udC1mYW1pbHk9InN5c3RlbS11aSxzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZmlsbDojY2JkNWUxIj48dGV4dCB4PSIxNDAiIHk9IjEwOCI+T3BlblNlYXJjaCBjbGllbnQ8L3RleHQ+PHRleHQgeD0iNDUwIiB5PSIxMDgiPlRyYW5zbGF0ZXMgcmVxdWVzdHMsIGF1dGg8L3RleHQ+PHRleHQgeD0iNzYwIiB5PSIxMDgiPkluZGV4ZXMgYW5kIHNlYXJjaDwvdGV4dD48L2c+CjxnIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNvcy1yb3V0ZSkiIHN0eWxlPSJzdHJva2U6Izk0YTNiOCI+PHBhdGggZD0iTTI2MCA5MCBIMzI1Ii8+PHBhdGggZD0iTTU3MCA5MCBINjM1Ii8+PC9nPgo8L3N2Zz4=)

#### Requests and authentication

The adapter forwards the supported document, search, aggregation, index, cluster, ingest and scripting operations. It translates differences in requests and responses, such as the point-in-time path: `_search/point_in_time` becomes `_pit`. The adapter checks the AWS SigV4 signature on each request, then calls Elasticsearch with Elastic credentials or API keys. You configure backend permissions in Elastic's security model.

Elasticsearch 8.x accepts `compatible-with=7` headers for its earlier REST API. The adapter uses them where they apply, alongside its own translations. This does not make every OpenSearch request or client version work. Test your application's queries, response parsing and client behavior against the listed operations. See [Elastic's API compatibility documentation](https://www.elastic.co/docs/reference/elasticsearch/rest-apis/compatibility).

#### Plugin APIs

OpenSearch and Elasticsearch have different plugin APIs. The adapter maps k-NN vector fields from `knn_vector` to `dense_vector` and converts the query to Elasticsearch's `knn` form. SQL requests move from `_plugins/_sql` to `_sql`, with the response fields translated. Index State Management (ISM) policies map to Elasticsearch Index Lifecycle Management (ILM) where their actions fit ILM's phases.

Alerting, anomaly detection and machine learning map to Elasticsearch's `_watcher` and `_ml` features. Some of these need a commercial Elastic subscription. The operations table shows which APIs are translated and which are not supported.

#### Deployment, security and availability

The Azure resource does not expose the deployment's topology. You set size and topology in the Elastic Cloud console. The documented default is 16 GB RAM, 560 GB storage and two availability zones, with instances up to 256 GB RAM. Elastic Cloud publishes monthly availability commitments of 99.5%, 99.9% and 99.95% for one-, two- and three-zone deployments, subject to the subscription and its high-availability conditions. The subscription also decides which commercial features you get, so choose topology and subscription together.

Security uses Elastic's own configuration, API keys and single sign-on, not OpenSearch Security roles. Document- and field-level security and other commercial features depend on the subscription you buy. The hosted offering's subscription terms apply whatever the source-code license. Elastic added an AGPLv3 option for the free source portions in 2024; see its [licensing FAQ](https://www.elastic.co/pricing/faq/licensing/).

#### Limitations

* **PPL is not supported.** Elasticsearch has no PPL, and the adapter does not translate PPL requests. Replace them with an application change. - **The OpenSearch Security API is not supported.** OpenSearch Security configuration is not translated. Configure users, roles and permissions in Elastic's security model instead. - **Notifications and observability objects are not supported.** They have no Elasticsearch equivalent. They need backend-native configuration or an application change. - **ISM behaves differently: custom states and transitions are not mapped.** ILM has fixed phases, so only ISM actions that fit those phases are mapped. - **Snapshots behave differently: an OpenSearch snapshot does not restore into Elasticsearch.** Backup schedules and retention use Elastic Snapshot Lifecycle Management, which has a different API from OpenSearch snapshots. - **Some features need a commercial Elastic subscription.** Parts of alerting, anomaly detection and machine learning, and document- and field-level security, depend on the subscription you buy. - **The `_license` and `_xpack` endpoints are not supported.** They are Elasticsearch licensing APIs, not OpenSearch APIs, and are outside the mapping.

#### Other considerations

**Before going live.** Review mappings, analyzers and index settings before loading data. Check representative queries, including translated operations, before switching traffic.

**Moving from AWS.** The deployment starts empty. Move data with a compatible remote reindex or a bulk export and import. Replace AWS-managed snapshots with Elastic Snapshot Lifecycle Management schedules and retention that meet your recovery requirements.

**Sizing.** Choose shard layout, replicas, data tiers and memory for your indexing and query load. Published engine benchmarks describe their own versions and datasets; they do not measure this mapping. Measure your deployed application, including translated operations, when choosing capacity.

## On DigitalOcean

### OpenSearch Domain

| Operation | Area | Support | Depth | Notes |
| - | - | - | - | - |
| Cluster health / stats / \_cat APIs | Cluster | Supported | Most usage | - |
| Tasks API (\_tasks) | Cluster | Supported | Full surface | drives async reindex / update-by-query |
| Bulk (\_bulk) | Documents | Supported | Common | batch index/update/delete |
| Delete document | Documents | Supported | Common | - |
| Get document (GET /\{index}/\_doc/\{id}) | Documents | Supported | Common | - |
| Index document (PUT/POST /\{index}/\_doc) | Documents | Supported | Common | - |
| Multi-get (\_mget) | Documents | Supported | Most usage | - |
| Update document (\_update) | Documents | Supported | Common | - |
| Snapshots / backups (\_snapshot) | Durability | Supported | Full surface | native - the AWS OpenSearch domain is kept as-is |
| Aliases (\_aliases) | Index management | Supported | Most usage | - |
| Analyze (\_analyze) | Index management | Supported | Full surface | tokenizer/analyzer testing |
| Create / Delete / Get index | Index management | Supported | Common | - |
| Data streams (\_data\_stream) | Index management | Supported | Full surface | - |
| Open / Close index | Index management | Supported | Full surface | - |
| Put / Get mapping | Index management | Supported | Common | - |
| Refresh / Flush / Forcemerge | Index management | Supported | Most usage | - |
| Rollover / Shrink / Split / Clone | Index management | Supported | Full surface | - |
| Update / Get settings | Index management | Supported | Most usage | - |
| Index & component templates (\_index\_template / \_component\_template) | Ingest & templates | Supported | Full surface | - |
| Ingest pipelines (\_ingest/pipeline: put / get / delete / \_simulate) | Ingest & templates | Supported | Full surface | - |
| License / X-Pack (\_license, \_xpack) | Licensing | Supported | Full surface | n/a on OpenSearch |
| Index State Management (\_plugins/\_ism) | Lifecycle | Supported | Full surface | native - the AWS OpenSearch domain is kept as-is |
| Alerting / anomaly detection / ML Commons (\_plugins/\*) | Observability & ML | Supported | Full surface | native - the AWS OpenSearch domain is kept as-is |
| Notifications / observability (\_plugins/\_notifications, \_plugins/\_observability) | Observability & ML | Supported | Full surface | native - the AWS OpenSearch domain is kept as-is |
| PPL (\_plugins/\_ppl) | Query languages | Supported | Full surface | native - the AWS OpenSearch domain is kept as-is |
| SQL (\_plugins/\_sql) | Query languages | Supported | Full surface | native - the AWS OpenSearch domain is kept as-is |
| Stored scripts & Painless (\_scripts, \_scripts/painless/\_execute) | Scripting | Supported | Full surface | - |
| Aggregations | Search | Supported | Common | metrics + bucket aggregations in \_search |
| Count / Explain / Suggest | Search | Supported | Most usage | - |
| Field capabilities (\_field\_caps) | Search | Supported | Full surface | - |
| Multi-search (\_msearch) | Search | Supported | Most usage | - |
| Point-in-time (\_search/point\_in\_time) | Search | Supported | Most usage | native - the AWS OpenSearch domain is kept as-is |
| Reindex / Update-by-query / Delete-by-query | Search | Supported | Full surface | - |
| Scroll (\_search/scroll) | Search | Supported | Most usage | deep pagination |
| Search (\_search + query DSL) | Search | Supported | Common | - |
| Search templates (\_search/template, \_render/template) | Search | Supported | Full surface | - |
| Term vectors (\_termvectors / \_mtermvectors) | Search | Supported | Full surface | - |
| Security plugin / fine-grained access control (\_plugins/\_security) | Security | Supported | Full surface | native - the AWS OpenSearch domain is kept as-is |
| Vector search / k-NN (knn\_vector, \_plugins/\_knn) | Vector & ML | Supported | Full surface | native - the AWS OpenSearch domain is kept as-is |

#### Keep the managed domain

The application can continue using its existing AWS OpenSearch domain while other services run in the target environment. AWS continues to operate the domain. Its engine, plugin APIs, security configuration, and managed snapshots stay in place.

#### Connectivity and ownership

The customer deployment must be able to reach and authenticate to the AWS domain endpoint. This choice keeps an AWS service dependency and its existing operational ownership.

### DigitalOcean Managed OpenSearch

| Operation | Area | Support | Depth | Notes |
| - | - | - | - | - |
| Cluster health / stats / \_cat APIs | Cluster | Supported | Most usage | - |
| Tasks API (\_tasks) | Cluster | Supported | Full surface | drives async reindex / update-by-query |
| Bulk (\_bulk) | Documents | Supported | Common | batch index/update/delete |
| Delete document | Documents | Supported | Common | - |
| Get document (GET /\{index}/\_doc/\{id}) | Documents | Supported | Common | - |
| Index document (PUT/POST /\{index}/\_doc) | Documents | Supported | Common | - |
| Multi-get (\_mget) | Documents | Supported | Most usage | - |
| Update document (\_update) | Documents | Supported | Common | - |
| Snapshots / backups (\_snapshot) | Durability | Partial | Full surface | managed hourly (24h) + daily (3d) backups + a 7-day PITR window - a different model from AWS managed snapshots |
| Aliases (\_aliases) | Index management | Supported | Most usage | - |
| Analyze (\_analyze) | Index management | Supported | Full surface | tokenizer/analyzer testing |
| Create / Delete / Get index | Index management | Supported | Common | - |
| Data streams (\_data\_stream) | Index management | Supported | Full surface | - |
| Open / Close index | Index management | Supported | Full surface | - |
| Put / Get mapping | Index management | Supported | Common | - |
| Refresh / Flush / Forcemerge | Index management | Supported | Most usage | - |
| Rollover / Shrink / Split / Clone | Index management | Supported | Full surface | - |
| Update / Get settings | Index management | Supported | Most usage | - |
| Index & component templates (\_index\_template / \_component\_template) | Ingest & templates | Supported | Full surface | - |
| Ingest pipelines (\_ingest/pipeline: put / get / delete / \_simulate) | Ingest & templates | Supported | Full surface | - |
| License / X-Pack (\_license, \_xpack) | Licensing | Supported | Full surface | no license API - OpenSearch (Apache-2.0) |
| Index State Management (\_plugins/\_ism) | Lifecycle | Supported | Full surface | Index State Management runs natively via the ISM plugin and OpenSearch's ISM configuration |
| Alerting / anomaly detection / ML Commons (\_plugins/\*) | Observability & ML | Supported | Full surface | Alerting, Anomaly Detection and ML Commons are all bundled |
| Notifications / observability (\_plugins/\_notifications, \_plugins/\_observability) | Observability & ML | Supported | Full surface | Alerting, Anomaly Detection and ML Commons are all bundled |
| PPL (\_plugins/\_ppl) | Query languages | Supported | Full surface | PPL (\_plugins/\_ppl) is bundled |
| SQL (\_plugins/\_sql) | Query languages | Supported | Full surface | the SQL plugin (\_plugins/\_sql) is bundled - OpenSearch 2.19 |
| Stored scripts & Painless (\_scripts, \_scripts/painless/\_execute) | Scripting | Supported | Full surface | - |
| Aggregations | Search | Supported | Common | metrics + bucket aggregations in \_search |
| Count / Explain / Suggest | Search | Supported | Most usage | - |
| Field capabilities (\_field\_caps) | Search | Supported | Full surface | - |
| Multi-search (\_msearch) | Search | Supported | Most usage | - |
| Point-in-time (\_search/point\_in\_time) | Search | Supported | Most usage | native - OpenSearch engine |
| Reindex / Update-by-query / Delete-by-query | Search | Supported | Full surface | - |
| Scroll (\_search/scroll) | Search | Supported | Most usage | deep pagination |
| Search (\_search + query DSL) | Search | Supported | Common | - |
| Search templates (\_search/template, \_render/template) | Search | Supported | Full surface | - |
| Term vectors (\_termvectors / \_mtermvectors) | Search | Supported | Full surface | - |
| Security plugin / fine-grained access control (\_plugins/\_security) | Security | Partial | Full surface | the Security plugin is present, but DigitalOcean exposes only the doadmin user - no extra users/roles via DO |
| Vector search / k-NN (knn\_vector, \_plugins/\_knn) | Vector & ML | Supported | Full surface | k-NN + Neural search are bundled in the DigitalOcean OpenSearch distribution |

#### How it works

On AWS your app's OpenSearch or Elasticsearch client sends `_bulk`, `_search` and other OpenSearch REST calls to an **Amazon OpenSearch** domain. On DigitalOcean, Tensor9 creates a **DigitalOcean Managed OpenSearch** cluster (a `digitalocean_database_cluster` with `engine = "opensearch"`) when it builds the deployment, and points your domain's endpoint at the cluster's host.

Your app keeps the same clients and request formats. Nothing from Tensor9 handles the requests, so every index and query runs on DigitalOcean's OpenSearch engine at the cluster's own latency. DigitalOcean operates the cluster: it provisions the nodes and runs backups, failover and version upgrades. The cluster starts empty; your data moves separately.

![On AWS, your app's OpenSearch client calls an Amazon OpenSearch domain over the OpenSearch REST API. On DigitalOcean, the same client calls a DigitalOcean Managed OpenSearch 2.19 cluster directly, with nothing from Tensor9 in between.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBV1MsIHlvdXIgYXBwJ3MgT3BlblNlYXJjaCBjbGllbnQgY2FsbHMgYW4gQW1hem9uIE9wZW5TZWFyY2ggZG9tYWluIG92ZXIgdGhlIE9wZW5TZWFyY2ggUkVTVCBBUEkuIE9uIERpZ2l0YWxPY2VhbiwgdGhlIHNhbWUgY2xpZW50IGNhbGxzIGEgRGlnaXRhbE9jZWFuIE1hbmFnZWQgT3BlblNlYXJjaCAyLjE5IGNsdXN0ZXIgZGlyZWN0bHksIHdpdGggbm90aGluZyBmcm9tIFRlbnNvcjkgaW4gYmV0d2Vlbi4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPHJlY3QgeD0iMTYiIHk9IjQwIiB3aWR0aD0iMzkwIiBoZWlnaHQ9IjEyNCIgcng9IjE0IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1IiBzdHlsZT0iZmlsbDojZjhmYWZjO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjMyIiB5PSI2MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9IjgwIiB3aWR0aD0iMTY0IiBoZWlnaHQ9IjYyIiByeD0iMTEiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjExMiIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYSI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjExMiIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+T3BlblNlYXJjaCBjbGllbnQ8L3RleHQ+CjxsaW5lIHgxPSIxOTQiIHkxPSIxMTEiIHgyPSIyMjIiIHkyPSIxMTEiIHN0cm9rZS13aWR0aD0iMiIgc3R5bGU9InN0cm9rZTojOTRhM2I4Ii8+CjxyZWN0IHg9IjIyMiIgeT0iODAiIHdpZHRoPSIxNjQiIGhlaWdodD0iNjIiIHJ4PSIxMSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNjYmQ1ZTEiLz4KPHRleHQgeD0iMzA0IiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+QW1hem9uIE9wZW5TZWFyY2g8L3RleHQ+Cjx0ZXh0IHg9IjMwNCIgeT0iMTIzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+QVdTLW1hbmFnZWQgZG9tYWluPC90ZXh0Pgo8cmVjdCB4PSI0MzAiIHk9IjQwIiB3aWR0aD0iMzkwIiBoZWlnaHQ9IjEyNCIgcng9IjE0IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1IiBzdHlsZT0iZmlsbDojZjhmYWZjO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjQ0NiIgeT0iNjIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPk9OIERJR0lUQUxPQ0VBTjwvdGV4dD4KPHJlY3QgeD0iNDQ0IiB5PSI4MCIgd2lkdGg9IjE2NCIgaGVpZ2h0PSI2MiIgcng9IjExIiBzdHJva2Utd2lkdGg9IjEuNSIgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2NiZDVlMSIvPgo8dGV4dCB4PSI1MjYiIHk9IjEwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmEiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI1MjYiIHk9IjEyNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5zYW1lIGNsaWVudHM8L3RleHQ+CjxsaW5lIHgxPSI2MDgiIHkxPSIxMTEiIHgyPSI2MzYiIHkyPSIxMTEiIHN0cm9rZS13aWR0aD0iMiIgc3R5bGU9InN0cm9rZTojMDQ3ODU3Ii8+CjxyZWN0IHg9IjYzNiIgeT0iODAiIHdpZHRoPSIxNjQiIGhlaWdodD0iNjIiIHJ4PSIxMSIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0eWxlPSJmaWxsOiNlY2ZkZjU7c3Ryb2tlOiMwNDc4NTciLz4KPHRleHQgeD0iNzE4IiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTEuNXB4Ij5ETyBNYW5hZ2VkIE9wZW5TZWFyY2g8L3RleHQ+Cjx0ZXh0IHg9IjcxOCIgeT0iMTIzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5PcGVuU2VhcmNoIDIuMTk8L3RleHQ+Cjwvc3ZnPg==)

![On AWS, your app's OpenSearch client calls an Amazon OpenSearch domain over the OpenSearch REST API. On DigitalOcean, the same client calls a DigitalOcean Managed OpenSearch 2.19 cluster directly, with nothing from Tensor9 in between.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBV1MsIHlvdXIgYXBwJ3MgT3BlblNlYXJjaCBjbGllbnQgY2FsbHMgYW4gQW1hem9uIE9wZW5TZWFyY2ggZG9tYWluIG92ZXIgdGhlIE9wZW5TZWFyY2ggUkVTVCBBUEkuIE9uIERpZ2l0YWxPY2VhbiwgdGhlIHNhbWUgY2xpZW50IGNhbGxzIGEgRGlnaXRhbE9jZWFuIE1hbmFnZWQgT3BlblNlYXJjaCAyLjE5IGNsdXN0ZXIgZGlyZWN0bHksIHdpdGggbm90aGluZyBmcm9tIFRlbnNvcjkgaW4gYmV0d2Vlbi4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPHJlY3QgeD0iMTYiIHk9IjQwIiB3aWR0aD0iMzkwIiBoZWlnaHQ9IjEyNCIgcng9IjE0IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1IiBzdHlsZT0iZmlsbDojMGYxNzJhO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjMyIiB5PSI2MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM2NDc0OGIiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9IjgwIiB3aWR0aD0iMTY0IiBoZWlnaHQ9IjYyIiByeD0iMTEiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjExMiIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2YxZjVmOSI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjExMiIgeT0iMTI0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzk0YTNiOCI+T3BlblNlYXJjaCBjbGllbnQ8L3RleHQ+CjxsaW5lIHgxPSIxOTQiIHkxPSIxMTEiIHgyPSIyMjIiIHkyPSIxMTEiIHN0cm9rZS13aWR0aD0iMiIgc3R5bGU9InN0cm9rZTojNjQ3NDhiIi8+CjxyZWN0IHg9IjIyMiIgeT0iODAiIHdpZHRoPSIxNjQiIGhlaWdodD0iNjIiIHJ4PSIxMSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiM0NzU1NjkiLz4KPHRleHQgeD0iMzA0IiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjZjFmNWY5OyBmb250LXNpemU6MTJweCI+QW1hem9uIE9wZW5TZWFyY2g8L3RleHQ+Cjx0ZXh0IHg9IjMwNCIgeT0iMTIzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzk0YTNiOCI+QVdTLW1hbmFnZWQgZG9tYWluPC90ZXh0Pgo8cmVjdCB4PSI0MzAiIHk9IjQwIiB3aWR0aD0iMzkwIiBoZWlnaHQ9IjEyNCIgcng9IjE0IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1IiBzdHlsZT0iZmlsbDojMGYxNzJhO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjQ0NiIgeT0iNjIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiM2ZWU3YjciPk9OIERJR0lUQUxPQ0VBTjwvdGV4dD4KPHJlY3QgeD0iNDQ0IiB5PSI4MCIgd2lkdGg9IjE2NCIgaGVpZ2h0PSI2MiIgcng9IjExIiBzdHJva2Utd2lkdGg9IjEuNSIgc3R5bGU9ImZpbGw6IzFlMjkzYjtzdHJva2U6IzQ3NTU2OSIvPgo8dGV4dCB4PSI1MjYiIHk9IjEwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmMWY1ZjkiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI1MjYiIHk9IjEyNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3Ij5zYW1lIGNsaWVudHM8L3RleHQ+CjxsaW5lIHgxPSI2MDgiIHkxPSIxMTEiIHgyPSI2MzYiIHkyPSIxMTEiIHN0cm9rZS13aWR0aD0iMiIgc3R5bGU9InN0cm9rZTojNmVlN2I3Ii8+CjxyZWN0IHg9IjYzNiIgeT0iODAiIHdpZHRoPSIxNjQiIGhlaWdodD0iNjIiIHJ4PSIxMSIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0eWxlPSJmaWxsOiMwNjRlM2I7c3Ryb2tlOiM2ZWU3YjciLz4KPHRleHQgeD0iNzE4IiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3OyBmb250LXNpemU6MTEuNXB4Ij5ETyBNYW5hZ2VkIE9wZW5TZWFyY2g8L3RleHQ+Cjx0ZXh0IHg9IjcxOCIgeT0iMTIzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3Ij5PcGVuU2VhcmNoIDIuMTk8L3RleHQ+Cjwvc3ZnPg==)

Your OpenSearch domain becomes a DigitalOcean Managed OpenSearch cluster, and your clients connect to it directly.

#### The same engine

DigitalOcean Managed OpenSearch runs the **OpenSearch engine at version 2.19** (Apache-2.0, derived from Elasticsearch 7.10.2), the same engine as your AWS domain. Index and document operations (`_doc`, `_bulk`), search and aggregations (`_search`), mappings, ingest and Painless scripting behave as they do today.

The plugin APIs under `_plugins/*` are the bundled OpenSearch plugins: k-NN and Neural search for vectors (`_plugins/_knn`), SQL and PPL (`_plugins/_sql`, `_plugins/_ppl`), Index State Management, Alerting, Anomaly Detection and ML Commons.

One vector detail affects sizing: DigitalOcean offers no disk-resident approximate-nearest-neighbor index, so vector search is limited by node RAM. Size the cluster for large HNSW graphs accordingly.

![The same OpenSearch REST API, the core index, document, search and aggregation endpoints and the \_plugins APIs for k-NN, Neural search, SQL, PPL, index state management, alerting, anomaly detection and machine learning, runs natively on DigitalOcean's OpenSearch 2.19 engine, which is Apache-2.0 and derived from Elasticsearch 7.10.2.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTYwIiB2aWV3Qm94PSIwIDAgODM2IDE2MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgc2FtZSBPcGVuU2VhcmNoIFJFU1QgQVBJLCB0aGUgY29yZSBpbmRleCwgZG9jdW1lbnQsIHNlYXJjaCBhbmQgYWdncmVnYXRpb24gZW5kcG9pbnRzIGFuZCB0aGUgX3BsdWdpbnMgQVBJcyBmb3Igay1OTiwgTmV1cmFsIHNlYXJjaCwgU1FMLCBQUEwsIGluZGV4IHN0YXRlIG1hbmFnZW1lbnQsIGFsZXJ0aW5nLCBhbm9tYWx5IGRldGVjdGlvbiBhbmQgbWFjaGluZSBsZWFybmluZywgcnVucyBuYXRpdmVseSBvbiBEaWdpdGFsT2NlYW4ncyBPcGVuU2VhcmNoIDIuMTkgZW5naW5lLCB3aGljaCBpcyBBcGFjaGUtMi4wIGFuZCBkZXJpdmVkIGZyb20gRWxhc3RpY3NlYXJjaCA3LjEwLjIuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImRvb3MyLWEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYuNSIgbWFya2VySGVpZ2h0PSI2LjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIHN0eWxlPSJmaWxsOiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+Cjx0ZXh0IHg9IjI0IiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjgiPlRIRSBPUEVOU0VBUkNIIFJFU1QgQVBJPC90ZXh0Pgo8dGV4dCB4PSI1NjYiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5ESUdJVEFMT0NFQU4gT1BFTlNFQVJDSCAyLjE5PC90ZXh0Pgo8cmVjdCB4PSIyNCIgeT0iMzgiIHdpZHRoPSI0ODYiIGhlaWdodD0iMTA4IiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojZjhmYWZjO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjQyIiB5PSI2MyIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmEiPlNhbWUgcmVxdWVzdHMsIGJ5dGUtZm9yLWJ5dGU8L3RleHQ+Cjx0ZXh0IHg9IjQyIiB5PSI4NyIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTUiPl9kb2MgwrcgX2J1bGsgwrcgX3NlYXJjaCDCtyBfbWFwcGluZyDCtyBfYWdnczwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEwNyIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTUiPl9wbHVnaW5zL19rbm4gwrcgX3BsdWdpbnMvX3NxbCDCtyBfcGx1Z2lucy9fcHBsPC90ZXh0Pgo8dGV4dCB4PSI0MiIgeT0iMTI3IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzMzNDE1NSI+X3BsdWdpbnMvX2lzbSDCtyBfcGx1Z2lucy9fYWxlcnRpbmcgwrcgX3BsdWdpbnMvX21sPC90ZXh0Pgo8bGluZSB4MT0iNTEwIiB5MT0iOTIiIHgyPSI1NjIiIHkyPSI5MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Rvb3MyLWEpIiBzdHlsZT0ic3Ryb2tlOiM5NGEzYjgiLz4KPHJlY3QgeD0iNTY2IiB5PSIzOCIgd2lkdGg9IjI0NiIgaGVpZ2h0PSIxMDgiIHJ4PSIxMyIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0eWxlPSJmaWxsOiNlY2ZkZjU7c3Ryb2tlOiMwNDc4NTciLz4KPHRleHQgeD0iNjg5IiB5PSI3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMi41cHgiPk9wZW5TZWFyY2ggMi4xOSBlbmdpbmU8L3RleHQ+Cjx0ZXh0IHg9IjY4OSIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPkFwYWNoZS0yLjAgwrcgay1OTiArIE5ldXJhbCBidW5kbGVkPC90ZXh0Pgo8dGV4dCB4PSI2ODkiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm5hdGl2ZSBfcGx1Z2lucy8qPC90ZXh0Pgo8L3N2Zz4=)

![The same OpenSearch REST API, the core index, document, search and aggregation endpoints and the \_plugins APIs for k-NN, Neural search, SQL, PPL, index state management, alerting, anomaly detection and machine learning, runs natively on DigitalOcean's OpenSearch 2.19 engine, which is Apache-2.0 and derived from Elasticsearch 7.10.2.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTYwIiB2aWV3Qm94PSIwIDAgODM2IDE2MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgc2FtZSBPcGVuU2VhcmNoIFJFU1QgQVBJLCB0aGUgY29yZSBpbmRleCwgZG9jdW1lbnQsIHNlYXJjaCBhbmQgYWdncmVnYXRpb24gZW5kcG9pbnRzIGFuZCB0aGUgX3BsdWdpbnMgQVBJcyBmb3Igay1OTiwgTmV1cmFsIHNlYXJjaCwgU1FMLCBQUEwsIGluZGV4IHN0YXRlIG1hbmFnZW1lbnQsIGFsZXJ0aW5nLCBhbm9tYWx5IGRldGVjdGlvbiBhbmQgbWFjaGluZSBsZWFybmluZywgcnVucyBuYXRpdmVseSBvbiBEaWdpdGFsT2NlYW4ncyBPcGVuU2VhcmNoIDIuMTkgZW5naW5lLCB3aGljaCBpcyBBcGFjaGUtMi4wIGFuZCBkZXJpdmVkIGZyb20gRWxhc3RpY3NlYXJjaCA3LjEwLjIuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImRvb3MyLWEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYuNSIgbWFya2VySGVpZ2h0PSI2LjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIHN0eWxlPSJmaWxsOiM2NDc0OGIiLz48L21hcmtlcj48L2RlZnM+Cjx0ZXh0IHg9IjI0IiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM2NDc0OGIiPlRIRSBPUEVOU0VBUkNIIFJFU1QgQVBJPC90ZXh0Pgo8dGV4dCB4PSI1NjYiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzY0NzQ4YjsgZmlsbDojNmVlN2I3Ij5ESUdJVEFMT0NFQU4gT1BFTlNFQVJDSCAyLjE5PC90ZXh0Pgo8cmVjdCB4PSIyNCIgeT0iMzgiIHdpZHRoPSI0ODYiIGhlaWdodD0iMTA4IiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojMGYxNzJhO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjQyIiB5PSI2MyIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmMWY1ZjkiPlNhbWUgcmVxdWVzdHMsIGJ5dGUtZm9yLWJ5dGU8L3RleHQ+Cjx0ZXh0IHg9IjQyIiB5PSI4NyIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTEiPl9kb2MgwrcgX2J1bGsgwrcgX3NlYXJjaCDCtyBfbWFwcGluZyDCtyBfYWdnczwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEwNyIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTEiPl9wbHVnaW5zL19rbm4gwrcgX3BsdWdpbnMvX3NxbCDCtyBfcGx1Z2lucy9fcHBsPC90ZXh0Pgo8dGV4dCB4PSI0MiIgeT0iMTI3IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2NiZDVlMSI+X3BsdWdpbnMvX2lzbSDCtyBfcGx1Z2lucy9fYWxlcnRpbmcgwrcgX3BsdWdpbnMvX21sPC90ZXh0Pgo8bGluZSB4MT0iNTEwIiB5MT0iOTIiIHgyPSI1NjIiIHkyPSI5MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Rvb3MyLWEpIiBzdHlsZT0ic3Ryb2tlOiM2NDc0OGIiLz4KPHJlY3QgeD0iNTY2IiB5PSIzOCIgd2lkdGg9IjI0NiIgaGVpZ2h0PSIxMDgiIHJ4PSIxMyIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0eWxlPSJmaWxsOiMwNjRlM2I7c3Ryb2tlOiM2ZWU3YjciLz4KPHRleHQgeD0iNjg5IiB5PSI3NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2ZWU3Yjc7IGZvbnQtc2l6ZToxMi41cHgiPk9wZW5TZWFyY2ggMi4xOSBlbmdpbmU8L3RleHQ+Cjx0ZXh0IHg9IjY4OSIgeT0iOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2ZWU3YjciPkFwYWNoZS0yLjAgwrcgay1OTiArIE5ldXJhbCBidW5kbGVkPC90ZXh0Pgo8dGV4dCB4PSI2ODkiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5NGEzYjgiPm5hdGl2ZSBfcGx1Z2lucy8qPC90ZXh0Pgo8L3N2Zz4=)

The core index, search and aggregation API is the same, and the \_plugins/\* features are the plugins bundled in DigitalOcean's 2.19 distribution.

#### What changes: operational ownership

DigitalOcean operates the cluster, as AWS operates your domain today. It provisions the nodes and runs automated backups (hourly for the first 24 hours, then daily for up to 3 more days), failover to a standby node, and in-place version upgrades. Node health and patching follow DigitalOcean's control panel and API.

You choose the plan class (Basic, General Purpose or Memory-Optimized), the node count and the storage size. There is no separate dedicated-master tier; add a standby node when you want failover. With nothing in between, the cluster's performance is its own, and your own monitoring reports it.

![DigitalOcean runs the cluster: automated backups (hourly for the first 24 hours, then daily for up to 3 more days), failover to a standby node, and in-place version upgrades. You choose the plan class (Basic, General Purpose or Memory-Optimized), the node count from 1 to 15, and the storage size.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJEaWdpdGFsT2NlYW4gcnVucyB0aGUgY2x1c3RlcjogYXV0b21hdGVkIGJhY2t1cHMgKGhvdXJseSBmb3IgdGhlIGZpcnN0IDI0IGhvdXJzLCB0aGVuIGRhaWx5IGZvciB1cCB0byAzIG1vcmUgZGF5cyksIGZhaWxvdmVyIHRvIGEgc3RhbmRieSBub2RlLCBhbmQgaW4tcGxhY2UgdmVyc2lvbiB1cGdyYWRlcy4gWW91IGNob29zZSB0aGUgcGxhbiBjbGFzcyAoQmFzaWMsIEdlbmVyYWwgUHVycG9zZSBvciBNZW1vcnktT3B0aW1pemVkKSwgdGhlIG5vZGUgY291bnQgZnJvbSAxIHRvIDE1LCBhbmQgdGhlIHN0b3JhZ2Ugc2l6ZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZG9vczMtYSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNi41IiBtYXJrZXJIZWlnaHQ9IjYuNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgc3R5bGU9ImZpbGw6Izk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iNDQiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiOCI+V0hPIERPRVMgV0hBVDwvdGV4dD4KPHRleHQgeD0iMzYwIiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+RlVMTFkgTUFOQUdFRCBCWSBESUdJVEFMT0NFQU48L3RleHQ+CjxyZWN0IHg9IjQ0IiB5PSIzOCIgd2lkdGg9IjIyOCIgaGVpZ2h0PSI1OCIgcng9IjEwIiBzdHJva2Utd2lkdGg9IjEuNiIgc3R5bGU9ImZpbGw6I2VjZmRmNTtzdHJva2U6IzA0Nzg1NyIvPgo8dGV4dCB4PSI2MCIgeT0iNjIiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTIuNXB4Ij5EaWdpdGFsT2NlYW4gcnVucyBpdDwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjgwIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5iYWNrdXBzIMK3IGZhaWxvdmVyIMK3IHVwZ3JhZGVzPC90ZXh0Pgo8bGluZSB4MT0iMjc2IiB5MT0iNjciIHgyPSIzMjQiIHkyPSI2NyIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Rvb3MzLWEpIiBzdHlsZT0ic3Ryb2tlOiM5NGEzYjgiLz4KPHJlY3QgeD0iMzI4IiB5PSIzOCIgd2lkdGg9IjQ2OCIgaGVpZ2h0PSI1OCIgcng9IjEwIiBzdHJva2Utd2lkdGg9IjEuNCIgc3R5bGU9ImZpbGw6I2Y4ZmFmYztzdHJva2U6I2NiZDVlMSIvPgo8dGV4dCB4PSIzNDQiIHk9IjYyIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEyLjVweCI+QXV0b21hdGVkLCBvbiBEaWdpdGFsT2NlYW4ncyBzY2hlZHVsZTwvdGV4dD4KPHRleHQgeD0iMzQ0IiB5PSI4MiIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTUiPmhvdXJseSAyNGggKyBkYWlseSAzZCDCtyBzdGFuZGJ5IEhBIMK3IGluLXBsYWNlIHVwZ3JhZGVzPC90ZXh0Pgo8cmVjdCB4PSI0NCIgeT0iMTA0IiB3aWR0aD0iMjI4IiBoZWlnaHQ9IjU4IiByeD0iMTAiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojZjhmYWZjO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjYwIiB5PSIxMjgiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5Zb3UgY2hvb3NlIHRoZSBzaGFwZTwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjE0NiIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZmlsbDojMzM0MTU1Ij5wbGFuIMK3IG5vZGVzIMK3IHN0b3JhZ2U8L3RleHQ+CjxsaW5lIHgxPSIyNzYiIHkxPSIxMzMiIHgyPSIzMjQiIHkyPSIxMzMiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNkb29zMy1hKSIgc3R5bGU9InN0cm9rZTojOTRhM2I4Ii8+CjxyZWN0IHg9IjMyOCIgeT0iMTA0IiB3aWR0aD0iNDY4IiBoZWlnaHQ9IjU4IiByeD0iMTAiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojZjhmYWZjO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjM0NCIgeT0iMTI4IiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEyLjVweCI+U2l6ZWQgaW4gRGlnaXRhbE9jZWFuIHBsYW5zPC90ZXh0Pgo8dGV4dCB4PSIzNDQiIHk9IjE0OCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTUiPkJhc2ljIC8gR1AgLyBNZW1vcnkgwrcgMSB0byAxNSBub2RlcyDCtyBtYW5hZ2VkIHN0b3JhZ2U8L3RleHQ+Cjx0ZXh0IHg9IjQ0IiB5PSIxODQiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2I0NTMwOSI+QVdTIGRvbWFpbiBzZXR0aW5ncyBnaXZlIHdheSB0byBEaWdpdGFsT2NlYW4ncyBvd24gbWFuYWdlZCBtb2RlbDwvdGV4dD4KPC9zdmc+)

![DigitalOcean runs the cluster: automated backups (hourly for the first 24 hours, then daily for up to 3 more days), failover to a standby node, and in-place version upgrades. You choose the plan class (Basic, General Purpose or Memory-Optimized), the node count from 1 to 15, and the storage size.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJEaWdpdGFsT2NlYW4gcnVucyB0aGUgY2x1c3RlcjogYXV0b21hdGVkIGJhY2t1cHMgKGhvdXJseSBmb3IgdGhlIGZpcnN0IDI0IGhvdXJzLCB0aGVuIGRhaWx5IGZvciB1cCB0byAzIG1vcmUgZGF5cyksIGZhaWxvdmVyIHRvIGEgc3RhbmRieSBub2RlLCBhbmQgaW4tcGxhY2UgdmVyc2lvbiB1cGdyYWRlcy4gWW91IGNob29zZSB0aGUgcGxhbiBjbGFzcyAoQmFzaWMsIEdlbmVyYWwgUHVycG9zZSBvciBNZW1vcnktT3B0aW1pemVkKSwgdGhlIG5vZGUgY291bnQgZnJvbSAxIHRvIDE1LCBhbmQgdGhlIHN0b3JhZ2Ugc2l6ZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZG9vczMtYSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNi41IiBtYXJrZXJIZWlnaHQ9IjYuNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgc3R5bGU9ImZpbGw6IzY0NzQ4YiIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iNDQiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzY0NzQ4YiI+V0hPIERPRVMgV0hBVDwvdGV4dD4KPHRleHQgeD0iMzYwIiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM2NDc0OGI7IGZpbGw6IzZlZTdiNyI+RlVMTFkgTUFOQUdFRCBCWSBESUdJVEFMT0NFQU48L3RleHQ+CjxyZWN0IHg9IjQ0IiB5PSIzOCIgd2lkdGg9IjIyOCIgaGVpZ2h0PSI1OCIgcng9IjEwIiBzdHJva2Utd2lkdGg9IjEuNiIgc3R5bGU9ImZpbGw6IzA2NGUzYjtzdHJva2U6IzZlZTdiNyIvPgo8dGV4dCB4PSI2MCIgeT0iNjIiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3OyBmb250LXNpemU6MTIuNXB4Ij5EaWdpdGFsT2NlYW4gcnVucyBpdDwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjgwIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3Ij5iYWNrdXBzIMK3IGZhaWxvdmVyIMK3IHVwZ3JhZGVzPC90ZXh0Pgo8bGluZSB4MT0iMjc2IiB5MT0iNjciIHgyPSIzMjQiIHkyPSI2NyIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Rvb3MzLWEpIiBzdHlsZT0ic3Ryb2tlOiM2NDc0OGIiLz4KPHJlY3QgeD0iMzI4IiB5PSIzOCIgd2lkdGg9IjQ2OCIgaGVpZ2h0PSI1OCIgcng9IjEwIiBzdHJva2Utd2lkdGg9IjEuNCIgc3R5bGU9ImZpbGw6IzBmMTcyYTtzdHJva2U6IzQ3NTU2OSIvPgo8dGV4dCB4PSIzNDQiIHk9IjYyIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2YxZjVmOTsgZm9udC1zaXplOjEyLjVweCI+QXV0b21hdGVkLCBvbiBEaWdpdGFsT2NlYW4ncyBzY2hlZHVsZTwvdGV4dD4KPHRleHQgeD0iMzQ0IiB5PSI4MiIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTEiPmhvdXJseSAyNGggKyBkYWlseSAzZCDCtyBzdGFuZGJ5IEhBIMK3IGluLXBsYWNlIHVwZ3JhZGVzPC90ZXh0Pgo8cmVjdCB4PSI0NCIgeT0iMTA0IiB3aWR0aD0iMjI4IiBoZWlnaHQ9IjU4IiByeD0iMTAiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojMGYxNzJhO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjYwIiB5PSIxMjgiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjZjFmNWY5OyBmb250LXNpemU6MTIuNXB4Ij5Zb3UgY2hvb3NlIHRoZSBzaGFwZTwvdGV4dD4KPHRleHQgeD0iNjAiIHk9IjE0NiIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNzsgZmlsbDojY2JkNWUxIj5wbGFuIMK3IG5vZGVzIMK3IHN0b3JhZ2U8L3RleHQ+CjxsaW5lIHgxPSIyNzYiIHkxPSIxMzMiIHgyPSIzMjQiIHkyPSIxMzMiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNkb29zMy1hKSIgc3R5bGU9InN0cm9rZTojNjQ3NDhiIi8+CjxyZWN0IHg9IjMyOCIgeT0iMTA0IiB3aWR0aD0iNDY4IiBoZWlnaHQ9IjU4IiByeD0iMTAiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojMGYxNzJhO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjM0NCIgeT0iMTI4IiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2YxZjVmOTsgZm9udC1zaXplOjEyLjVweCI+U2l6ZWQgaW4gRGlnaXRhbE9jZWFuIHBsYW5zPC90ZXh0Pgo8dGV4dCB4PSIzNDQiIHk9IjE0OCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTEiPkJhc2ljIC8gR1AgLyBNZW1vcnkgwrcgMSB0byAxNSBub2RlcyDCtyBtYW5hZ2VkIHN0b3JhZ2U8L3RleHQ+Cjx0ZXh0IHg9IjQ0IiB5PSIxODQiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2ZiYmYyNCI+QVdTIGRvbWFpbiBzZXR0aW5ncyBnaXZlIHdheSB0byBEaWdpdGFsT2NlYW4ncyBvd24gbWFuYWdlZCBtb2RlbDwvdGV4dD4KPC9zdmc+)

DigitalOcean runs backups, failover and upgrades; you choose the plan, node count and storage size.

#### Network and access on DigitalOcean

The cluster can sit in a **DigitalOcean VPC** and be reached over a private network. Who may connect is set by a **trusted-sources allow-list** of IP addresses and DigitalOcean resources (up to 2,000 entries per cluster), in place of AWS security groups and VPC endpoint policies. DigitalOcean Cloud Firewalls do not apply to the cluster, and with trusted sources on, some DigitalOcean log-forwarding paths are unavailable.

Inside the cluster, DigitalOcean provides a **single `doadmin` user**. The OpenSearch Security plugin is present, but DigitalOcean does not offer creating more users or roles through its control panel or API. If your AWS setup uses fine-grained, per-index or per-user access control, you rebuild it around the one `doadmin` credential.

Connections are encrypted in transit with SSL, and data is encrypted at rest with LUKS, always on, with no customer-managed key option.

![The cluster sits in a DigitalOcean VPC on a private network. A trusted-sources allow-list of up to 2,000 entries decides who can connect, in place of AWS security groups and VPC endpoint policies. Inside the cluster there is a single doadmin user; DigitalOcean does not offer creating more users or roles, and DigitalOcean Cloud Firewalls do not apply to the cluster.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTkwIiB2aWV3Qm94PSIwIDAgODM2IDE5MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgY2x1c3RlciBzaXRzIGluIGEgRGlnaXRhbE9jZWFuIFZQQyBvbiBhIHByaXZhdGUgbmV0d29yay4gQSB0cnVzdGVkLXNvdXJjZXMgYWxsb3ctbGlzdCBvZiB1cCB0byAyLDAwMCBlbnRyaWVzIGRlY2lkZXMgd2hvIGNhbiBjb25uZWN0LCBpbiBwbGFjZSBvZiBBV1Mgc2VjdXJpdHkgZ3JvdXBzIGFuZCBWUEMgZW5kcG9pbnQgcG9saWNpZXMuIEluc2lkZSB0aGUgY2x1c3RlciB0aGVyZSBpcyBhIHNpbmdsZSBkb2FkbWluIHVzZXI7IERpZ2l0YWxPY2VhbiBkb2VzIG5vdCBvZmZlciBjcmVhdGluZyBtb3JlIHVzZXJzIG9yIHJvbGVzLCBhbmQgRGlnaXRhbE9jZWFuIENsb3VkIEZpcmV3YWxscyBkbyBub3QgYXBwbHkgdG8gdGhlIGNsdXN0ZXIuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImRvb3M0LWEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYuNSIgbWFya2VySGVpZ2h0PSI2LjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIHN0eWxlPSJmaWxsOiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSIzNCIgd2lkdGg9IjgwNCIgaGVpZ2h0PSIxMTAiIHJ4PSIxNCIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIgc3R5bGU9ImZpbGw6I2Y4ZmFmYztzdHJva2U6I2NiZDVlMSIvPgo8dGV4dCB4PSIzMiIgeT0iNTQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPkRJR0lUQUxPQ0VBTiBWUEMgwrcgUFJJVkFURSBORVRXT1JLPC90ZXh0Pgo8cmVjdCB4PSI0MCIgeT0iNjgiIHdpZHRoPSIxODAiIGhlaWdodD0iNjAiIHJ4PSIxMSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNjYmQ1ZTEiLz4KPHRleHQgeD0iMTMwIiB5PSI5NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5zYW1lIGNsaWVudHM8L3RleHQ+CjxsaW5lIHgxPSIyMjAiIHkxPSI5OCIgeDI9IjI3MiIgeTI9Ijk4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZG9vczQtYSkiIHN0eWxlPSJzdHJva2U6Izk0YTNiOCIvPgo8cmVjdCB4PSIyNzYiIHk9IjY4IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjYwIiByeD0iMTEiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojZmZmZmZmO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjM3NiIgeT0iOTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+VHJ1c3RlZCBzb3VyY2VzPC90ZXh0Pgo8dGV4dCB4PSIzNzYiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPklQIGFsbG93LWxpc3QsIHVwIHRvIDIsMDAwPC90ZXh0Pgo8bGluZSB4MT0iNDc2IiB5MT0iOTgiIHgyPSI1MjgiIHkyPSI5OCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Rvb3M0LWEpIiBzdHlsZT0ic3Ryb2tlOiM5NGEzYjgiLz4KPHJlY3QgeD0iNTMyIiB5PSI2OCIgd2lkdGg9IjI2NCIgaGVpZ2h0PSI2MCIgcng9IjExIiBzdHJva2Utd2lkdGg9IjEuNyIgc3R5bGU9ImZpbGw6I2VjZmRmNTtzdHJva2U6IzA0Nzg1NyIvPgo8dGV4dCB4PSI2NjQiIHk9Ijk0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEyLjVweCI+RE8gTWFuYWdlZCBPcGVuU2VhcmNoPC90ZXh0Pgo8dGV4dCB4PSI2NjQiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+c2luZ2xlIGRvYWRtaW4gc3VwZXJ1c2VyPC90ZXh0Pgo8dGV4dCB4PSIzMiIgeT0iMTcyIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNiNDUzMDkiPnRydXN0ZWQgc291cmNlcyByZXBsYWNlIEFXUyBzZWN1cml0eSBncm91cHM7IERpZ2l0YWxPY2VhbiBDbG91ZCBGaXJld2FsbHMgZG8gbm90IGFwcGx5IGhlcmU8L3RleHQ+Cjwvc3ZnPg==)

![The cluster sits in a DigitalOcean VPC on a private network. A trusted-sources allow-list of up to 2,000 entries decides who can connect, in place of AWS security groups and VPC endpoint policies. Inside the cluster there is a single doadmin user; DigitalOcean does not offer creating more users or roles, and DigitalOcean Cloud Firewalls do not apply to the cluster.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTkwIiB2aWV3Qm94PSIwIDAgODM2IDE5MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgY2x1c3RlciBzaXRzIGluIGEgRGlnaXRhbE9jZWFuIFZQQyBvbiBhIHByaXZhdGUgbmV0d29yay4gQSB0cnVzdGVkLXNvdXJjZXMgYWxsb3ctbGlzdCBvZiB1cCB0byAyLDAwMCBlbnRyaWVzIGRlY2lkZXMgd2hvIGNhbiBjb25uZWN0LCBpbiBwbGFjZSBvZiBBV1Mgc2VjdXJpdHkgZ3JvdXBzIGFuZCBWUEMgZW5kcG9pbnQgcG9saWNpZXMuIEluc2lkZSB0aGUgY2x1c3RlciB0aGVyZSBpcyBhIHNpbmdsZSBkb2FkbWluIHVzZXI7IERpZ2l0YWxPY2VhbiBkb2VzIG5vdCBvZmZlciBjcmVhdGluZyBtb3JlIHVzZXJzIG9yIHJvbGVzLCBhbmQgRGlnaXRhbE9jZWFuIENsb3VkIEZpcmV3YWxscyBkbyBub3QgYXBwbHkgdG8gdGhlIGNsdXN0ZXIuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImRvb3M0LWEiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjYuNSIgbWFya2VySGVpZ2h0PSI2LjUiIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIHN0eWxlPSJmaWxsOiM2NDc0OGIiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSIzNCIgd2lkdGg9IjgwNCIgaGVpZ2h0PSIxMTAiIHJ4PSIxNCIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIgc3R5bGU9ImZpbGw6IzBmMTcyYTtzdHJva2U6IzQ3NTU2OSIvPgo8dGV4dCB4PSIzMiIgeT0iNTQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiM2ZWU3YjciPkRJR0lUQUxPQ0VBTiBWUEMgwrcgUFJJVkFURSBORVRXT1JLPC90ZXh0Pgo8cmVjdCB4PSI0MCIgeT0iNjgiIHdpZHRoPSIxODAiIGhlaWdodD0iNjAiIHJ4PSIxMSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiM0NzU1NjkiLz4KPHRleHQgeD0iMTMwIiB5PSI5NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmMWY1Zjk7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSIxMzAiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3Ij5zYW1lIGNsaWVudHM8L3RleHQ+CjxsaW5lIHgxPSIyMjAiIHkxPSI5OCIgeDI9IjI3MiIgeTI9Ijk4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZG9vczQtYSkiIHN0eWxlPSJzdHJva2U6IzY0NzQ4YiIvPgo8cmVjdCB4PSIyNzYiIHk9IjY4IiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjYwIiByeD0iMTEiIHN0cm9rZS13aWR0aD0iMS41IiBzdHlsZT0iZmlsbDojMWUyOTNiO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjM3NiIgeT0iOTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjZjFmNWY5OyBmb250LXNpemU6MTJweCI+VHJ1c3RlZCBzb3VyY2VzPC90ZXh0Pgo8dGV4dCB4PSIzNzYiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5NGEzYjgiPklQIGFsbG93LWxpc3QsIHVwIHRvIDIsMDAwPC90ZXh0Pgo8bGluZSB4MT0iNDc2IiB5MT0iOTgiIHgyPSI1MjgiIHkyPSI5OCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Rvb3M0LWEpIiBzdHlsZT0ic3Ryb2tlOiM2NDc0OGIiLz4KPHJlY3QgeD0iNTMyIiB5PSI2OCIgd2lkdGg9IjI2NCIgaGVpZ2h0PSI2MCIgcng9IjExIiBzdHJva2Utd2lkdGg9IjEuNyIgc3R5bGU9ImZpbGw6IzA2NGUzYjtzdHJva2U6IzZlZTdiNyIvPgo8dGV4dCB4PSI2NjQiIHk9Ijk0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNzsgZm9udC1zaXplOjEyLjVweCI+RE8gTWFuYWdlZCBPcGVuU2VhcmNoPC90ZXh0Pgo8dGV4dCB4PSI2NjQiIHk9IjExMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNyI+c2luZ2xlIGRvYWRtaW4gc3VwZXJ1c2VyPC90ZXh0Pgo8dGV4dCB4PSIzMiIgeT0iMTcyIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmYmJmMjQiPnRydXN0ZWQgc291cmNlcyByZXBsYWNlIEFXUyBzZWN1cml0eSBncm91cHM7IERpZ2l0YWxPY2VhbiBDbG91ZCBGaXJld2FsbHMgZG8gbm90IGFwcGx5IGhlcmU8L3RleHQ+Cjwvc3ZnPg==)

A trusted-sources allow-list inside a VPC decides who can connect, and the cluster has a single doadmin user.

#### Limitations

The OpenSearch API stays the same. Access control, backups, networking and sizing differ.

Where DigitalOcean Managed OpenSearch and Amazon OpenSearch differ

* **Fine-grained access control is not supported.** Per-index and per-user roles have no counterpart: DigitalOcean provides only the `doadmin` user and does not offer managing more OpenSearch users or roles.
* **Backups behave differently.** Automated backups run hourly for the first 24 hours, then daily for up to 3 more days, with point-in-time recovery limited to the last 7 days. A restore creates a new cluster rather than restoring in place.
* **Security groups and VPC endpoint policies are not supported.** Access is an allow-list of IP addresses and resources (up to 2,000 entries) inside a DigitalOcean VPC. Cloud Firewalls do not apply, and some log-forwarding paths are unavailable while trusted sources are on.
* **Vector search behaves differently: it is limited by memory:** k-NN and Neural search are bundled, but there is no disk-resident ANN index, so large HNSW graphs must fit in node RAM.
* **Customer-managed encryption keys are not supported.** Data is encrypted at rest with LUKS, always on, using DigitalOcean-managed keys.
* **Sizing behaves differently.** Clusters are sized by plan (Basic: 1 or 3 nodes; General Purpose and Memory-Optimized: 1, 3, 6, 9 or 15) with managed storage. AWS instance types and EBS limits do not map one to one.
* **The SLA behaves differently: it covers Managed Databases generally.** DigitalOcean's Managed Databases SLA is 99.95% monthly uptime with a standby node and 99.5% without. It does not name OpenSearch.

#### Other considerations

**What Tensor9 maps at build time.** Tensor9 maps `engine_version` to a DigitalOcean major version, `cluster_config.instance_type` to a size, and `instance_count` to the node count (1 if unset). Settings with no DigitalOcean equivalent are dropped and reported as warnings: the dedicated-master tier, a separate EBS volume size (storage follows the node size), fine-grained access control, a customer-managed key, node-to-node encryption, zone awareness, `vpc_options`, endpoint options and log publishing. A domain declared with `count` or `for_each` stops the build with an error.

**Credentials.** DigitalOcean creates the cluster's credentials; none are written into the generated Terraform.

**Moving from AWS.** The cluster starts empty and indices are not copied. Restore from a snapshot or reindex from the source, and check versions and capacity before switching traffic.

## On DigitalOcean and Scaleway

### Lucenia (self-hosted)

| Operation | Area | Support | Depth | Notes |
| - | - | - | - | - |
| Cluster health / stats / \_cat APIs | Cluster | Supported | Most usage | - |
| Tasks API (\_tasks) | Cluster | Supported | Full surface | drives async reindex / update-by-query |
| Bulk (\_bulk) | Documents | Supported | Common | batch index/update/delete |
| Delete document | Documents | Supported | Common | - |
| Get document (GET /\{index}/\_doc/\{id}) | Documents | Supported | Common | - |
| Index document (PUT/POST /\{index}/\_doc) | Documents | Supported | Common | - |
| Multi-get (\_mget) | Documents | Supported | Most usage | - |
| Update document (\_update) | Documents | Supported | Common | - |
| Snapshots / backups (\_snapshot) | Durability | Partial | Full surface | self-managed |
| Aliases (\_aliases) | Index management | Supported | Most usage | - |
| Analyze (\_analyze) | Index management | Supported | Full surface | tokenizer/analyzer testing |
| Create / Delete / Get index | Index management | Supported | Common | - |
| Data streams (\_data\_stream) | Index management | Supported | Full surface | - |
| Open / Close index | Index management | Supported | Full surface | - |
| Put / Get mapping | Index management | Supported | Common | - |
| Refresh / Flush / Forcemerge | Index management | Supported | Most usage | - |
| Rollover / Shrink / Split / Clone | Index management | Supported | Full surface | - |
| Update / Get settings | Index management | Supported | Most usage | - |
| Index & component templates (\_index\_template / \_component\_template) | Ingest & templates | Supported | Full surface | - |
| Ingest pipelines (\_ingest/pipeline: put / get / delete / \_simulate) | Ingest & templates | Supported | Full surface | - |
| License / X-Pack (\_license, \_xpack) | Licensing | Supported | Full surface | dual Apache-2.0 / SSPL; no license API |
| Index State Management (\_plugins/\_ism) | Lifecycle | Partial | Full surface | OpenSearch-compatible fork; per-plugin parity not independently verified |
| Alerting / anomaly detection / ML Commons (\_plugins/\*) | Observability & ML | Partial | Full surface | no published per-plugin compatibility matrix |
| Notifications / observability (\_plugins/\_notifications, \_plugins/\_observability) | Observability & ML | Partial | Full surface | no published per-plugin compatibility matrix |
| PPL (\_plugins/\_ppl) | Query languages | Partial | Full surface | OpenSearch-compatible fork; per-plugin parity not independently verified |
| SQL (\_plugins/\_sql) | Query languages | Partial | Full surface | OpenSearch-compatible fork; per-plugin parity not independently verified |
| Stored scripts & Painless (\_scripts, \_scripts/painless/\_execute) | Scripting | Supported | Full surface | - |
| Aggregations | Search | Supported | Common | metrics + bucket aggregations in \_search |
| Count / Explain / Suggest | Search | Supported | Most usage | - |
| Field capabilities (\_field\_caps) | Search | Supported | Full surface | - |
| Multi-search (\_msearch) | Search | Supported | Most usage | - |
| Point-in-time (\_search/point\_in\_time) | Search | Supported | Most usage | REST-API-compatible with OpenSearch clients |
| Reindex / Update-by-query / Delete-by-query | Search | Supported | Full surface | - |
| Scroll (\_search/scroll) | Search | Supported | Most usage | deep pagination |
| Search (\_search + query DSL) | Search | Supported | Common | - |
| Search templates (\_search/template, \_render/template) | Search | Supported | Full surface | - |
| Term vectors (\_termvectors / \_mtermvectors) | Search | Supported | Full surface | - |
| Security plugin / fine-grained access control (\_plugins/\_security) | Security | Partial | Full surface | SSPL security component; LUCENIA\_INITIAL\_ADMIN\_PASSWORD |
| Vector search / k-NN (knn\_vector, \_plugins/\_knn) | Vector & ML | Supported | Full surface | confirmed vector support - Lucene-native HNSW/IVF/Faiss, hybrid BM25+vector |

#### How it works

On AWS, your app's OpenSearch or Elasticsearch client calls an Amazon OpenSearch domain over the OpenSearch REST API, with `_bulk`, `_search` and the rest. In the target cloud, Tensor9 deploys a self-hosted Lucenia cluster on Kubernetes with the Lucenia Helm chart, and points your client's endpoint at it when the product is built.

Lucenia offers an OpenSearch-compatible REST API, so your existing clients connect straight to it and keep the same request formats. No Tensor9 component handles these requests: every index and query call goes directly to the Lucenia cluster, at its own latency.

![On AWS, your app's OpenSearch client calls an AWS-managed Amazon OpenSearch domain. In the target cloud, the same app and clients call a self-hosted Lucenia cluster on Kubernetes over the same OpenSearch REST API, with no proxy in between.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBV1MsIHlvdXIgYXBwJ3MgT3BlblNlYXJjaCBjbGllbnQgY2FsbHMgYW4gQVdTLW1hbmFnZWQgQW1hem9uIE9wZW5TZWFyY2ggZG9tYWluLiBJbiB0aGUgdGFyZ2V0IGNsb3VkLCB0aGUgc2FtZSBhcHAgYW5kIGNsaWVudHMgY2FsbCBhIHNlbGYtaG9zdGVkIEx1Y2VuaWEgY2x1c3RlciBvbiBLdWJlcm5ldGVzIG92ZXIgdGhlIHNhbWUgT3BlblNlYXJjaCBSRVNUIEFQSSwgd2l0aCBubyBwcm94eSBpbiBiZXR3ZWVuLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8cmVjdCB4PSIxNiIgeT0iNDAiIHdpZHRoPSIzOTAiIGhlaWdodD0iMTI0IiByeD0iMTQiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiIHN0eWxlPSJmaWxsOiNmOGZhZmM7c3Ryb2tlOiNjYmQ1ZTEiLz4KPHRleHQgeD0iMzIiIHk9IjYyIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iODAiIHdpZHRoPSIxNjQiIGhlaWdodD0iNjIiIHJ4PSIxMSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0eWxlPSJmaWxsOiNmZmZmZmY7c3Ryb2tlOiNjYmQ1ZTEiLz4KPHRleHQgeD0iMTEyIiB5PSIxMDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhIj5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iMTEyIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5PcGVuU2VhcmNoIGNsaWVudDwvdGV4dD4KPGxpbmUgeDE9IjE5NCIgeTE9IjExMSIgeDI9IjIyMiIgeTI9IjExMSIgc3Ryb2tlLXdpZHRoPSIyIiBzdHlsZT0ic3Ryb2tlOiM5NGEzYjgiLz4KPHJlY3QgeD0iMjIyIiB5PSI4MCIgd2lkdGg9IjE2NCIgaGVpZ2h0PSI2MiIgcng9IjExIiBzdHJva2Utd2lkdGg9IjEuNSIgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2NiZDVlMSIvPgo8dGV4dCB4PSIzMDQiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gT3BlblNlYXJjaDwvdGV4dD4KPHRleHQgeD0iMzA0IiB5PSIxMjMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5BV1MtbWFuYWdlZCBkb21haW48L3RleHQ+CjxyZWN0IHg9IjQzMCIgeT0iNDAiIHdpZHRoPSIzOTAiIGhlaWdodD0iMTI0IiByeD0iMTQiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiIHN0eWxlPSJmaWxsOiNmOGZhZmM7c3Ryb2tlOiNjYmQ1ZTEiLz4KPHRleHQgeD0iNDQ2IiB5PSI2MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+T04gVEhFIFRBUkdFVCBDTE9VRDwvdGV4dD4KPHJlY3QgeD0iNDQ0IiB5PSI4MCIgd2lkdGg9IjE2NCIgaGVpZ2h0PSI2MiIgcng9IjExIiBzdHJva2Utd2lkdGg9IjEuNSIgc3R5bGU9ImZpbGw6I2ZmZmZmZjtzdHJva2U6I2NiZDVlMSIvPgo8dGV4dCB4PSI1MjYiIHk9IjEwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmEiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI1MjYiIHk9IjEyNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5zYW1lIGNsaWVudHM8L3RleHQ+CjxsaW5lIHgxPSI2MDgiIHkxPSIxMTEiIHgyPSI2MzYiIHkyPSIxMTEiIHN0cm9rZS13aWR0aD0iMiIgc3R5bGU9InN0cm9rZTojMDQ3ODU3Ii8+CjxyZWN0IHg9IjYzNiIgeT0iODAiIHdpZHRoPSIxNjQiIGhlaWdodD0iNjIiIHJ4PSIxMSIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0eWxlPSJmaWxsOiNlY2ZkZjU7c3Ryb2tlOiMwNDc4NTciLz4KPHRleHQgeD0iNzE4IiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+THVjZW5pYSBjbHVzdGVyPC90ZXh0Pgo8dGV4dCB4PSI3MTgiIHk9IjEyMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+b24gS3ViZXJuZXRlczwvdGV4dD4KPC9zdmc+)

![On AWS, your app's OpenSearch client calls an AWS-managed Amazon OpenSearch domain. In the target cloud, the same app and clients call a self-hosted Lucenia cluster on Kubernetes over the same OpenSearch REST API, with no proxy in between.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTgwIiB2aWV3Qm94PSIwIDAgODM2IDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBV1MsIHlvdXIgYXBwJ3MgT3BlblNlYXJjaCBjbGllbnQgY2FsbHMgYW4gQVdTLW1hbmFnZWQgQW1hem9uIE9wZW5TZWFyY2ggZG9tYWluLiBJbiB0aGUgdGFyZ2V0IGNsb3VkLCB0aGUgc2FtZSBhcHAgYW5kIGNsaWVudHMgY2FsbCBhIHNlbGYtaG9zdGVkIEx1Y2VuaWEgY2x1c3RlciBvbiBLdWJlcm5ldGVzIG92ZXIgdGhlIHNhbWUgT3BlblNlYXJjaCBSRVNUIEFQSSwgd2l0aCBubyBwcm94eSBpbiBiZXR3ZWVuLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8cmVjdCB4PSIxNiIgeT0iNDAiIHdpZHRoPSIzOTAiIGhlaWdodD0iMTI0IiByeD0iMTQiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiIHN0eWxlPSJmaWxsOiMwZjE3MmE7c3Ryb2tlOiM0NzU1NjkiLz4KPHRleHQgeD0iMzIiIHk9IjYyIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzY0NzQ4YiI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iODAiIHdpZHRoPSIxNjQiIGhlaWdodD0iNjIiIHJ4PSIxMSIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0eWxlPSJmaWxsOiMxZTI5M2I7c3Ryb2tlOiM0NzU1NjkiLz4KPHRleHQgeD0iMTEyIiB5PSIxMDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjZjFmNWY5Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iMTEyIiB5PSIxMjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTRhM2I4Ij5PcGVuU2VhcmNoIGNsaWVudDwvdGV4dD4KPGxpbmUgeDE9IjE5NCIgeTE9IjExMSIgeDI9IjIyMiIgeTI9IjExMSIgc3Ryb2tlLXdpZHRoPSIyIiBzdHlsZT0ic3Ryb2tlOiM2NDc0OGIiLz4KPHJlY3QgeD0iMjIyIiB5PSI4MCIgd2lkdGg9IjE2NCIgaGVpZ2h0PSI2MiIgcng9IjExIiBzdHJva2Utd2lkdGg9IjEuNSIgc3R5bGU9ImZpbGw6IzFlMjkzYjtzdHJva2U6IzQ3NTU2OSIvPgo8dGV4dCB4PSIzMDQiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmMWY1Zjk7IGZvbnQtc2l6ZToxMnB4Ij5BbWF6b24gT3BlblNlYXJjaDwvdGV4dD4KPHRleHQgeD0iMzA0IiB5PSIxMjMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTRhM2I4Ij5BV1MtbWFuYWdlZCBkb21haW48L3RleHQ+CjxyZWN0IHg9IjQzMCIgeT0iNDAiIHdpZHRoPSIzOTAiIGhlaWdodD0iMTI0IiByeD0iMTQiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiIHN0eWxlPSJmaWxsOiMwZjE3MmE7c3Ryb2tlOiM0NzU1NjkiLz4KPHRleHQgeD0iNDQ2IiB5PSI2MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM2NDc0OGI7IGZpbGw6IzZlZTdiNyI+T04gVEhFIFRBUkdFVCBDTE9VRDwvdGV4dD4KPHJlY3QgeD0iNDQ0IiB5PSI4MCIgd2lkdGg9IjE2NCIgaGVpZ2h0PSI2MiIgcng9IjExIiBzdHJva2Utd2lkdGg9IjEuNSIgc3R5bGU9ImZpbGw6IzFlMjkzYjtzdHJva2U6IzQ3NTU2OSIvPgo8dGV4dCB4PSI1MjYiIHk9IjEwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmMWY1ZjkiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI1MjYiIHk9IjEyNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3Ij5zYW1lIGNsaWVudHM8L3RleHQ+CjxsaW5lIHgxPSI2MDgiIHkxPSIxMTEiIHgyPSI2MzYiIHkyPSIxMTEiIHN0cm9rZS13aWR0aD0iMiIgc3R5bGU9InN0cm9rZTojNmVlN2I3Ii8+CjxyZWN0IHg9IjYzNiIgeT0iODAiIHdpZHRoPSIxNjQiIGhlaWdodD0iNjIiIHJ4PSIxMSIgc3Ryb2tlLXdpZHRoPSIxLjciIHN0eWxlPSJmaWxsOiMwNjRlM2I7c3Ryb2tlOiM2ZWU3YjciLz4KPHRleHQgeD0iNzE4IiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3OyBmb250LXNpemU6MTJweCI+THVjZW5pYSBjbHVzdGVyPC90ZXh0Pgo8dGV4dCB4PSI3MTgiIHk9IjEyMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNyI+b24gS3ViZXJuZXRlczwvdGV4dD4KPC9zdmc+)

Your clients connect straight to a self-hosted Lucenia cluster on Kubernetes, with no proxy in between.

#### A compatible fork

Lucenia is a separate project derived from OpenSearch 2.14, built by the creator of OpenSearch. It uses Apache Lucene 10.4 and documents API and mixed-cluster compatibility with OpenSearch and Elasticsearch. Lucenia is dual-licensed under Apache-2.0 and SSPL.

Its API tracks roughly OpenSearch 2.18. Your core client calls (`_doc`, `_bulk`, `_search`, mappings, aggregations) work as they do today. Vector search is confirmed: k-NN with Lucene-native HNSW, IVF and Faiss, plus hybrid BM25 and vector queries. Lucenia is at an early 0.x version (0.11.1 at the current release). It is a young engine to adopt deliberately, not a generally available managed service like the cloud providers' offerings.

![Your existing OpenSearch REST clients, with core document, search, aggregation and vector search calls, reach Lucenia. Lucenia is a separate engine: an API-compatible fork of OpenSearch 2.14 built on Apache Lucene 10.4 by the creator of OpenSearch, dual-licensed Apache-2.0 and SSPL, and at an early 0.x release.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTYwIiB2aWV3Qm94PSIwIDAgODM2IDE2MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJZb3VyIGV4aXN0aW5nIE9wZW5TZWFyY2ggUkVTVCBjbGllbnRzLCB3aXRoIGNvcmUgZG9jdW1lbnQsIHNlYXJjaCwgYWdncmVnYXRpb24gYW5kIHZlY3RvciBzZWFyY2ggY2FsbHMsIHJlYWNoIEx1Y2VuaWEuIEx1Y2VuaWEgaXMgYSBzZXBhcmF0ZSBlbmdpbmU6IGFuIEFQSS1jb21wYXRpYmxlIGZvcmsgb2YgT3BlblNlYXJjaCAyLjE0IGJ1aWx0IG9uIEFwYWNoZSBMdWNlbmUgMTAuNCBieSB0aGUgY3JlYXRvciBvZiBPcGVuU2VhcmNoLCBkdWFsLWxpY2Vuc2VkIEFwYWNoZS0yLjAgYW5kIFNTUEwsIGFuZCBhdCBhbiBlYXJseSAwLnggcmVsZWFzZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ibHVjMi1hIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2LjUiIG1hcmtlckhlaWdodD0iNi41IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBzdHlsZT0iZmlsbDojOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8dGV4dCB4PSIyNCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4Ij5ZT1VSIE9QRU5TRUFSQ0ggUkVTVCBDTElFTlRTPC90ZXh0Pgo8dGV4dCB4PSI2MDAiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5BIFNFUEFSQVRFLCBDT01QQVRJQkxFIEVOR0lORTwvdGV4dD4KPHJlY3QgeD0iMjQiIHk9IjM4IiB3aWR0aD0iNDg2IiBoZWlnaHQ9IjEwOCIgcng9IjEzIiBzdHJva2Utd2lkdGg9IjEuNSIgc3R5bGU9ImZpbGw6I2Y4ZmFmYztzdHJva2U6I2NiZDVlMSIvPgo8dGV4dCB4PSI0MiIgeT0iNjMiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhIj5TYW1lIGNsaWVudCBjYWxsczwvdGV4dD4KPHRleHQgeD0iNDIiIHk9Ijg3IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzMzNDE1NSI+X2RvYyDCtyBfYnVsayDCtyBfc2VhcmNoIMK3IF9tYXBwaW5nIMK3IF9hZ2dzPC90ZXh0Pgo8dGV4dCB4PSI0MiIgeT0iMTA3IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzMzNDE1NSI+X3BsdWdpbnMvX2tubiDCtyBrbm5fdmVjdG9yIMK3IGh5YnJpZCBCTTI1K3ZlY3RvcjwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEyNyIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTUiPkFQSSB0cmFja3Mgcm91Z2hseSBPcGVuU2VhcmNoIDIuMTg8L3RleHQ+CjxsaW5lIHgxPSI1MTAiIHkxPSI5MiIgeDI9IjU2OCIgeTI9IjkyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbHVjMi1hKSIgc3R5bGU9InN0cm9rZTojOTRhM2I4Ii8+CjxyZWN0IHg9IjU3MiIgeT0iMzgiIHdpZHRoPSIyNDAiIGhlaWdodD0iMTA4IiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS43IiBzdHlsZT0iZmlsbDojZWNmZGY1O3N0cm9rZTojMDQ3ODU3Ii8+Cjx0ZXh0IHg9IjY5MiIgeT0iNzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5MdWNlbmlhPC90ZXh0Pgo8dGV4dCB4PSI2OTIiIHk9Ijk2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5Gb3JrIG9mIE9wZW5TZWFyY2ggMi4xNDwvdGV4dD4KPHRleHQgeD0iNjkyIiB5PSIxMTUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPkFwYWNoZSBMdWNlbmUgMTAuNCDCtyAwLng8L3RleHQ+Cjx0ZXh0IHg9IjY5MiIgeT0iMTM0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+ZHVhbCBBcGFjaGUtMi4wIC8gU1NQTDwvdGV4dD4KPC9zdmc+)

![Your existing OpenSearch REST clients, with core document, search, aggregation and vector search calls, reach Lucenia. Lucenia is a separate engine: an API-compatible fork of OpenSearch 2.14 built on Apache Lucene 10.4 by the creator of OpenSearch, dual-licensed Apache-2.0 and SSPL, and at an early 0.x release.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTYwIiB2aWV3Qm94PSIwIDAgODM2IDE2MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJZb3VyIGV4aXN0aW5nIE9wZW5TZWFyY2ggUkVTVCBjbGllbnRzLCB3aXRoIGNvcmUgZG9jdW1lbnQsIHNlYXJjaCwgYWdncmVnYXRpb24gYW5kIHZlY3RvciBzZWFyY2ggY2FsbHMsIHJlYWNoIEx1Y2VuaWEuIEx1Y2VuaWEgaXMgYSBzZXBhcmF0ZSBlbmdpbmU6IGFuIEFQSS1jb21wYXRpYmxlIGZvcmsgb2YgT3BlblNlYXJjaCAyLjE0IGJ1aWx0IG9uIEFwYWNoZSBMdWNlbmUgMTAuNCBieSB0aGUgY3JlYXRvciBvZiBPcGVuU2VhcmNoLCBkdWFsLWxpY2Vuc2VkIEFwYWNoZS0yLjAgYW5kIFNTUEwsIGFuZCBhdCBhbiBlYXJseSAwLnggcmVsZWFzZS4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ibHVjMi1hIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI2LjUiIG1hcmtlckhlaWdodD0iNi41IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBzdHlsZT0iZmlsbDojNjQ3NDhiIi8+PC9tYXJrZXI+PC9kZWZzPgo8dGV4dCB4PSIyNCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjNjQ3NDhiIj5ZT1VSIE9QRU5TRUFSQ0ggUkVTVCBDTElFTlRTPC90ZXh0Pgo8dGV4dCB4PSI2MDAiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzY0NzQ4YjsgZmlsbDojNmVlN2I3Ij5BIFNFUEFSQVRFLCBDT01QQVRJQkxFIEVOR0lORTwvdGV4dD4KPHJlY3QgeD0iMjQiIHk9IjM4IiB3aWR0aD0iNDg2IiBoZWlnaHQ9IjEwOCIgcng9IjEzIiBzdHJva2Utd2lkdGg9IjEuNSIgc3R5bGU9ImZpbGw6IzBmMTcyYTtzdHJva2U6IzQ3NTU2OSIvPgo8dGV4dCB4PSI0MiIgeT0iNjMiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjZjFmNWY5Ij5TYW1lIGNsaWVudCBjYWxsczwvdGV4dD4KPHRleHQgeD0iNDIiIHk9Ijg3IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2NiZDVlMSI+X2RvYyDCtyBfYnVsayDCtyBfc2VhcmNoIMK3IF9tYXBwaW5nIMK3IF9hZ2dzPC90ZXh0Pgo8dGV4dCB4PSI0MiIgeT0iMTA3IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2NiZDVlMSI+X3BsdWdpbnMvX2tubiDCtyBrbm5fdmVjdG9yIMK3IGh5YnJpZCBCTTI1K3ZlY3RvcjwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEyNyIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTEiPkFQSSB0cmFja3Mgcm91Z2hseSBPcGVuU2VhcmNoIDIuMTg8L3RleHQ+CjxsaW5lIHgxPSI1MTAiIHkxPSI5MiIgeDI9IjU2OCIgeTI9IjkyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbHVjMi1hKSIgc3R5bGU9InN0cm9rZTojNjQ3NDhiIi8+CjxyZWN0IHg9IjU3MiIgeT0iMzgiIHdpZHRoPSIyNDAiIGhlaWdodD0iMTA4IiByeD0iMTMiIHN0cm9rZS13aWR0aD0iMS43IiBzdHlsZT0iZmlsbDojMDY0ZTNiO3N0cm9rZTojNmVlN2I3Ii8+Cjx0ZXh0IHg9IjY5MiIgeT0iNzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3Ij5MdWNlbmlhPC90ZXh0Pgo8dGV4dCB4PSI2OTIiIHk9Ijk2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNmVlN2I3Ij5Gb3JrIG9mIE9wZW5TZWFyY2ggMi4xNDwvdGV4dD4KPHRleHQgeD0iNjkyIiB5PSIxMTUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2ZWU3YjciPkFwYWNoZSBMdWNlbmUgMTAuNCDCtyAwLng8L3RleHQ+Cjx0ZXh0IHg9IjY5MiIgeT0iMTM0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzk0YTNiOCI+ZHVhbCBBcGFjaGUtMi4wIC8gU1NQTDwvdGV4dD4KPC9zdmc+)

Lucenia is a separate engine; its compatible REST API is what keeps your clients working.

#### What is confirmed, and what is unverified

Lucenia confirms support for documents, search, aggregations and vector search. Its k-NN support uses Lucene-native HNSW, IVF and Faiss, and hybrid BM25 and vector queries run on the Lucene 10.4 core.

The other OpenSearch `_plugins/*` features are unverified. SQL and PPL, Index State Management, Alerting, Anomaly Detection and ML Commons have no published per-plugin compatibility list for Lucenia. Check the specific APIs your app calls against your Lucenia version before you depend on them. Lucenia's own performance and cost claims publish no method, so this page does not cite them.

![On Lucenia, documents, search, aggregations and vector search are confirmed, and your OpenSearch REST clients keep working. The other OpenSearch plugins (SQL, PPL, index state management, alerting, anomaly detection, ML Commons) have no published compatibility list, so check them before you depend on them.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBMdWNlbmlhLCBkb2N1bWVudHMsIHNlYXJjaCwgYWdncmVnYXRpb25zIGFuZCB2ZWN0b3Igc2VhcmNoIGFyZSBjb25maXJtZWQsIGFuZCB5b3VyIE9wZW5TZWFyY2ggUkVTVCBjbGllbnRzIGtlZXAgd29ya2luZy4gVGhlIG90aGVyIE9wZW5TZWFyY2ggcGx1Z2lucyAoU1FMLCBQUEwsIGluZGV4IHN0YXRlIG1hbmFnZW1lbnQsIGFsZXJ0aW5nLCBhbm9tYWx5IGRldGVjdGlvbiwgTUwgQ29tbW9ucykgaGF2ZSBubyBwdWJsaXNoZWQgY29tcGF0aWJpbGl0eSBsaXN0LCBzbyBjaGVjayB0aGVtIGJlZm9yZSB5b3UgZGVwZW5kIG9uIHRoZW0uIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+Cjx0ZXh0IHg9IjQ0IiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjgiPldIQVQgTFVDRU5JQSBDT1ZFUlM8L3RleHQ+Cjx0ZXh0IHg9IjQ3MiIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPkhPVyBUTyBSRUFEIElUPC90ZXh0Pgo8cmVjdCB4PSI0NCIgeT0iMzgiIHdpZHRoPSIyODgiIGhlaWdodD0iNTgiIHJ4PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0eWxlPSJmaWxsOiNlY2ZkZjU7c3Ryb2tlOiMwNDc4NTciLz4KPHRleHQgeD0iNjAiIHk9IjYyIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEyLjVweCI+Q29yZSArIHZlY3RvcjogY29uZmlybWVkPC90ZXh0Pgo8dGV4dCB4PSI2MCIgeT0iODAiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPl9zZWFyY2ggwrcgX2FnZ3Mgwrcgay1OTiBITlNXL0lWRi9GYWlzczwvdGV4dD4KPHJlY3QgeD0iMzYwIiB5PSIzOCIgd2lkdGg9IjQzNiIgaGVpZ2h0PSI1OCIgcng9IjEwIiBzdHJva2Utd2lkdGg9IjEuNCIgc3R5bGU9ImZpbGw6I2Y4ZmFmYztzdHJva2U6I2NiZDVlMSIvPgo8dGV4dCB4PSIzNzYiIHk9IjYyIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEyLjVweCI+V29ya3Mgd2l0aCB5b3VyIE9wZW5TZWFyY2ggY2xpZW50czwvdGV4dD4KPHRleHQgeD0iMzc2IiB5PSI4MiIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTUiPmh5YnJpZCBCTTI1ICsgdmVjdG9yLCBuYXRpdmUgdG8gTHVjZW5lIDEwLjQ8L3RleHQ+CjxyZWN0IHg9IjQ0IiB5PSIxMDQiIHdpZHRoPSIyODgiIGhlaWdodD0iNTgiIHJ4PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0eWxlPSJmaWxsOiNmZmZiZWI7c3Ryb2tlOiNmNTllMGIiLz4KPHRleHQgeD0iNjAiIHk9IjEyOCIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYjQ1MzA5OyBmb250LXNpemU6MTIuNXB4Ij5PdGhlciBfcGx1Z2lucy8qOiB1bnZlcmlmaWVkPC90ZXh0Pgo8dGV4dCB4PSI2MCIgeT0iMTQ2IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzMzNDE1NTsgZmlsbDojYjQ1MzA5Ij5TUUwgwrcgUFBMIMK3IElTTSDCtyBhbGVydGluZyDCtyBBRCDCtyBNTDwvdGV4dD4KPHJlY3QgeD0iMzYwIiB5PSIxMDQiIHdpZHRoPSI0MzYiIGhlaWdodD0iNTgiIHJ4PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0eWxlPSJmaWxsOiNmOGZhZmM7c3Ryb2tlOiNjYmQ1ZTEiLz4KPHRleHQgeD0iMzc2IiB5PSIxMjgiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5ObyBwdWJsaXNoZWQgY29tcGF0aWJpbGl0eSBsaXN0PC90ZXh0Pgo8dGV4dCB4PSIzNzYiIHk9IjE0OCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTUiPnZlcmlmeSB0aGUgQVBJcyB5b3UgdXNlIGJlZm9yZSB5b3UgZGVwZW5kIG9uIHRoZW08L3RleHQ+Cjx0ZXh0IHg9IjQ0IiB5PSIxODQiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2I0NTMwOSI+VmVjdG9yIHNlYXJjaCBpcyBjb25maXJtZWQ7IHRoZSByZXN0IG9mIF9wbHVnaW5zLyogaXMgdW52ZXJpZmllZCBvbiBMdWNlbmlhPC90ZXh0Pgo8L3N2Zz4=)

![On Lucenia, documents, search, aggregations and vector search are confirmed, and your OpenSearch REST clients keep working. The other OpenSearch plugins (SQL, PPL, index state management, alerting, anomaly detection, ML Commons) have no published compatibility list, so check them before you depend on them.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBMdWNlbmlhLCBkb2N1bWVudHMsIHNlYXJjaCwgYWdncmVnYXRpb25zIGFuZCB2ZWN0b3Igc2VhcmNoIGFyZSBjb25maXJtZWQsIGFuZCB5b3VyIE9wZW5TZWFyY2ggUkVTVCBjbGllbnRzIGtlZXAgd29ya2luZy4gVGhlIG90aGVyIE9wZW5TZWFyY2ggcGx1Z2lucyAoU1FMLCBQUEwsIGluZGV4IHN0YXRlIG1hbmFnZW1lbnQsIGFsZXJ0aW5nLCBhbm9tYWx5IGRldGVjdGlvbiwgTUwgQ29tbW9ucykgaGF2ZSBubyBwdWJsaXNoZWQgY29tcGF0aWJpbGl0eSBsaXN0LCBzbyBjaGVjayB0aGVtIGJlZm9yZSB5b3UgZGVwZW5kIG9uIHRoZW0uIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+Cjx0ZXh0IHg9IjQ0IiB5PSIyNiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM2NDc0OGIiPldIQVQgTFVDRU5JQSBDT1ZFUlM8L3RleHQ+Cjx0ZXh0IHg9IjQ3MiIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiM2ZWU3YjciPkhPVyBUTyBSRUFEIElUPC90ZXh0Pgo8cmVjdCB4PSI0NCIgeT0iMzgiIHdpZHRoPSIyODgiIGhlaWdodD0iNTgiIHJ4PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0eWxlPSJmaWxsOiMwNjRlM2I7c3Ryb2tlOiM2ZWU3YjciLz4KPHRleHQgeD0iNjAiIHk9IjYyIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNzsgZm9udC1zaXplOjEyLjVweCI+Q29yZSArIHZlY3RvcjogY29uZmlybWVkPC90ZXh0Pgo8dGV4dCB4PSI2MCIgeT0iODAiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2ZWU3YjciPl9zZWFyY2ggwrcgX2FnZ3Mgwrcgay1OTiBITlNXL0lWRi9GYWlzczwvdGV4dD4KPHJlY3QgeD0iMzYwIiB5PSIzOCIgd2lkdGg9IjQzNiIgaGVpZ2h0PSI1OCIgcng9IjEwIiBzdHJva2Utd2lkdGg9IjEuNCIgc3R5bGU9ImZpbGw6IzBmMTcyYTtzdHJva2U6IzQ3NTU2OSIvPgo8dGV4dCB4PSIzNzYiIHk9IjYyIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2YxZjVmOTsgZm9udC1zaXplOjEyLjVweCI+V29ya3Mgd2l0aCB5b3VyIE9wZW5TZWFyY2ggY2xpZW50czwvdGV4dD4KPHRleHQgeD0iMzc2IiB5PSI4MiIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTEiPmh5YnJpZCBCTTI1ICsgdmVjdG9yLCBuYXRpdmUgdG8gTHVjZW5lIDEwLjQ8L3RleHQ+CjxyZWN0IHg9IjQ0IiB5PSIxMDQiIHdpZHRoPSIyODgiIGhlaWdodD0iNTgiIHJ4PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjUiIHN0eWxlPSJmaWxsOiM0MjIwMDY7c3Ryb2tlOiNmYmJmMjQiLz4KPHRleHQgeD0iNjAiIHk9IjEyOCIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjZmJiZjI0OyBmb250LXNpemU6MTIuNXB4Ij5PdGhlciBfcGx1Z2lucy8qOiB1bnZlcmlmaWVkPC90ZXh0Pgo8dGV4dCB4PSI2MCIgeT0iMTQ2IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2NiZDVlMTsgZmlsbDojZmJiZjI0Ij5TUUwgwrcgUFBMIMK3IElTTSDCtyBhbGVydGluZyDCtyBBRCDCtyBNTDwvdGV4dD4KPHJlY3QgeD0iMzYwIiB5PSIxMDQiIHdpZHRoPSI0MzYiIGhlaWdodD0iNTgiIHJ4PSIxMCIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0eWxlPSJmaWxsOiMwZjE3MmE7c3Ryb2tlOiM0NzU1NjkiLz4KPHRleHQgeD0iMzc2IiB5PSIxMjgiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjZjFmNWY5OyBmb250LXNpemU6MTIuNXB4Ij5ObyBwdWJsaXNoZWQgY29tcGF0aWJpbGl0eSBsaXN0PC90ZXh0Pgo8dGV4dCB4PSIzNzYiIHk9IjE0OCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTEiPnZlcmlmeSB0aGUgQVBJcyB5b3UgdXNlIGJlZm9yZSB5b3UgZGVwZW5kIG9uIHRoZW08L3RleHQ+Cjx0ZXh0IHg9IjQ0IiB5PSIxODQiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2ZiYmYyNCI+VmVjdG9yIHNlYXJjaCBpcyBjb25maXJtZWQ7IHRoZSByZXN0IG9mIF9wbHVnaW5zLyogaXMgdW52ZXJpZmllZCBvbiBMdWNlbmlhPC90ZXh0Pgo8L3N2Zz4=)

Core and vector search are confirmed; the other plugins are unverified, so check them first.

#### You operate the cluster

On the AWS domain, AWS ran high availability, version upgrades, daily snapshots and fine-grained access control under an SLA. A self-hosted Lucenia cluster is yours to run. You define the node pools (data and master), replica counts and cross-zone placement. You schedule snapshots. You own version upgrades on an early 0.x project, where releases can move quickly and upgrade paths are still maturing.

Security is configured again, not inherited. The access control AWS applied to the domain becomes Lucenia's own security configuration (its SSPL security component), which you set up separately. You set the initial admin password with `LUCENIA_INITIAL_ADMIN_PASSWORD`. No provider offers an availability SLA: the cluster's uptime depends on how you run it.

![On the AWS domain, AWS ran high availability, version upgrades, daily snapshots, fine-grained access control and an SLA. On a self-hosted Lucenia cluster, you own the node pools and replicas, snapshots and version upgrades, and the Lucenia security configuration, and no provider offers an availability SLA.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiB0aGUgQVdTIGRvbWFpbiwgQVdTIHJhbiBoaWdoIGF2YWlsYWJpbGl0eSwgdmVyc2lvbiB1cGdyYWRlcywgZGFpbHkgc25hcHNob3RzLCBmaW5lLWdyYWluZWQgYWNjZXNzIGNvbnRyb2wgYW5kIGFuIFNMQS4gT24gYSBzZWxmLWhvc3RlZCBMdWNlbmlhIGNsdXN0ZXIsIHlvdSBvd24gdGhlIG5vZGUgcG9vbHMgYW5kIHJlcGxpY2FzLCBzbmFwc2hvdHMgYW5kIHZlcnNpb24gdXBncmFkZXMsIGFuZCB0aGUgTHVjZW5pYSBzZWN1cml0eSBjb25maWd1cmF0aW9uLCBhbmQgbm8gcHJvdmlkZXIgb2ZmZXJzIGFuIGF2YWlsYWJpbGl0eSBTTEEuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9Imx1YzQtYSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNi41IiBtYXJrZXJIZWlnaHQ9IjYuNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgc3R5bGU9ImZpbGw6Izk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iNDAiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiOCI+T04gVEhFIEFXUyBET01BSU48L3RleHQ+Cjx0ZXh0IHg9IjQ3MCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPk9OIFlPVVIgTFVDRU5JQSBDTFVTVEVSPC90ZXh0Pgo8cmVjdCB4PSI0MCIgeT0iMzgiIHdpZHRoPSIzNjAiIGhlaWdodD0iMTI4IiByeD0iMTIiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojZjhmYWZjO3N0cm9rZTojY2JkNWUxIi8+Cjx0ZXh0IHg9IjU4IiB5PSI2NiIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPkFXUyBvcGVyYXRlZCBpdDwvdGV4dD4KPHRleHQgeD0iNTgiIHk9IjkyIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzMzNDE1NSI+aGlnaCBhdmFpbGFiaWxpdHkgwrcgdmVyc2lvbiB1cGdyYWRlczwvdGV4dD4KPHRleHQgeD0iNTgiIHk9IjExNiIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICMzMzQxNTUiPm1hbmFnZWQgZGFpbHkgc25hcHNob3RzPC90ZXh0Pgo8dGV4dCB4PSI1OCIgeT0iMTQwIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzMzNDE1NSI+ZmluZS1ncmFpbmVkIGFjY2VzcyBjb250cm9sIMK3IFNMQTwvdGV4dD4KPGxpbmUgeDE9IjQwNCIgeTE9IjEwMiIgeDI9IjQ1MiIgeTI9IjEwMiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2x1YzQtYSkiIHN0eWxlPSJzdHJva2U6Izk0YTNiOCIvPgo8cmVjdCB4PSI0NTYiIHk9IjM4IiB3aWR0aD0iMzQwIiBoZWlnaHQ9IjEyOCIgcng9IjEyIiBzdHJva2Utd2lkdGg9IjEuNyIgc3R5bGU9ImZpbGw6I2VjZmRmNTtzdHJva2U6IzA0Nzg1NyIvPgo8dGV4dCB4PSI0NzQiIHk9IjY2IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEyLjVweCI+WW91IG9wZXJhdGUgaXQgb24gS3ViZXJuZXRlczwvdGV4dD4KPHRleHQgeD0iNDc0IiB5PSI5MiIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+bm9kZVBvb2xzIChkYXRhICsgbWFzdGVyKSDCtyByZXBsaWNhcyB5b3Ugc2V0PC90ZXh0Pgo8dGV4dCB4PSI0NzQiIHk9IjExNiIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+c2VsZi1tYW5hZ2VkIHNuYXBzaG90cyDCtyB2ZXJzaW9uIHVwZ3JhZGVzPC90ZXh0Pgo8dGV4dCB4PSI0NzQiIHk9IjE0MCIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYjQ1MzA5OyBmb250LXNpemU6MTAuNXB4Ij5MdWNlbmlhIHNlY3VyaXR5IMK3IG5vIHByb3ZpZGVyIFNMQTwvdGV4dD4KPC9zdmc+)

![On the AWS domain, AWS ran high availability, version upgrades, daily snapshots, fine-grained access control and an SLA. On a self-hosted Lucenia cluster, you own the node pools and replicas, snapshots and version upgrades, and the Lucenia security configuration, and no provider offers an availability SLA.](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTg0IiB2aWV3Qm94PSIwIDAgODM2IDE4NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiB0aGUgQVdTIGRvbWFpbiwgQVdTIHJhbiBoaWdoIGF2YWlsYWJpbGl0eSwgdmVyc2lvbiB1cGdyYWRlcywgZGFpbHkgc25hcHNob3RzLCBmaW5lLWdyYWluZWQgYWNjZXNzIGNvbnRyb2wgYW5kIGFuIFNMQS4gT24gYSBzZWxmLWhvc3RlZCBMdWNlbmlhIGNsdXN0ZXIsIHlvdSBvd24gdGhlIG5vZGUgcG9vbHMgYW5kIHJlcGxpY2FzLCBzbmFwc2hvdHMgYW5kIHZlcnNpb24gdXBncmFkZXMsIGFuZCB0aGUgTHVjZW5pYSBzZWN1cml0eSBjb25maWd1cmF0aW9uLCBhbmQgbm8gcHJvdmlkZXIgb2ZmZXJzIGFuIGF2YWlsYWJpbGl0eSBTTEEuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9Imx1YzQtYSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNi41IiBtYXJrZXJIZWlnaHQ9IjYuNSIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgc3R5bGU9ImZpbGw6IzY0NzQ4YiIvPjwvbWFya2VyPjwvZGVmcz4KPHRleHQgeD0iNDAiIHk9IjI2IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzY0NzQ4YiI+T04gVEhFIEFXUyBET01BSU48L3RleHQ+Cjx0ZXh0IHg9IjQ3MCIgeT0iMjYiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiM2ZWU3YjciPk9OIFlPVVIgTFVDRU5JQSBDTFVTVEVSPC90ZXh0Pgo8cmVjdCB4PSI0MCIgeT0iMzgiIHdpZHRoPSIzNjAiIGhlaWdodD0iMTI4IiByeD0iMTIiIHN0cm9rZS13aWR0aD0iMS40IiBzdHlsZT0iZmlsbDojMGYxNzJhO3N0cm9rZTojNDc1NTY5Ii8+Cjx0ZXh0IHg9IjU4IiB5PSI2NiIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNmMWY1Zjk7IGZvbnQtc2l6ZToxMi41cHgiPkFXUyBvcGVyYXRlZCBpdDwvdGV4dD4KPHRleHQgeD0iNTgiIHk9IjkyIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2NiZDVlMSI+aGlnaCBhdmFpbGFiaWxpdHkgwrcgdmVyc2lvbiB1cGdyYWRlczwvdGV4dD4KPHRleHQgeD0iNTgiIHk9IjExNiIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjYmQ1ZTEiPm1hbmFnZWQgZGFpbHkgc25hcHNob3RzPC90ZXh0Pgo8dGV4dCB4PSI1OCIgeT0iMTQwIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2NiZDVlMSI+ZmluZS1ncmFpbmVkIGFjY2VzcyBjb250cm9sIMK3IFNMQTwvdGV4dD4KPGxpbmUgeDE9IjQwNCIgeTE9IjEwMiIgeDI9IjQ1MiIgeTI9IjEwMiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2x1YzQtYSkiIHN0eWxlPSJzdHJva2U6IzY0NzQ4YiIvPgo8cmVjdCB4PSI0NTYiIHk9IjM4IiB3aWR0aD0iMzQwIiBoZWlnaHQ9IjEyOCIgcng9IjEyIiBzdHJva2Utd2lkdGg9IjEuNyIgc3R5bGU9ImZpbGw6IzA2NGUzYjtzdHJva2U6IzZlZTdiNyIvPgo8dGV4dCB4PSI0NzQiIHk9IjY2IiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNzsgZm9udC1zaXplOjEyLjVweCI+WW91IG9wZXJhdGUgaXQgb24gS3ViZXJuZXRlczwvdGV4dD4KPHRleHQgeD0iNDc0IiB5PSI5MiIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNyI+bm9kZVBvb2xzIChkYXRhICsgbWFzdGVyKSDCtyByZXBsaWNhcyB5b3Ugc2V0PC90ZXh0Pgo8dGV4dCB4PSI0NzQiIHk9IjExNiIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzZlZTdiNyI+c2VsZi1tYW5hZ2VkIHNuYXBzaG90cyDCtyB2ZXJzaW9uIHVwZ3JhZGVzPC90ZXh0Pgo8dGV4dCB4PSI0NzQiIHk9IjE0MCIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjZmJiZjI0OyBmb250LXNpemU6MTAuNXB4Ij5MdWNlbmlhIHNlY3VyaXR5IMK3IG5vIHByb3ZpZGVyIFNMQTwvdGV4dD4KPC9zdmc+)

What AWS ran for the domain becomes yours to run, and no provider offers an availability SLA.

#### Limitations

Your existing clients use Lucenia's compatible REST API. Review these differences before you choose this backend.

Where an AWS OpenSearch domain and self-hosted Lucenia differ

* **The engine behaves differently: Lucenia is not the OpenSearch codebase.** It is a fork of OpenSearch 2.14 on Apache Lucene 10.4. Your clients rely on its compatible REST API, but it is a separate project with its own release schedule and its own bugs.
* **Plugins other than k-NN are not verified.** SQL, PPL, ISM, Alerting, Anomaly Detection and ML Commons have no published compatibility list for Lucenia. You must confirm each API your app calls before cutover; do not assume the domain's plugin behavior.
* **Maturity behaves differently: Lucenia is an early 0.x release.** It is at `0.11.1`. Tooling, client testing, long-term support and upgrade stability are less established than for a generally available managed service. Weigh that against the workload's risk tolerance.
* **An availability SLA is not offered.** The cluster runs on your Kubernetes, so no provider guarantees uptime. A separate managed Lucenia Cloud exists, but it is not this self-hosted backend.
* **You must replace the domain's managed features.** Daily snapshots, fine-grained access control, and AWS instance families and EBS limits are not available. You size Lucenia with your own node pools and storage (`persistence.size`, `storageClass`) and secure it through its own model.
* **You must review the SSPL license.** Lucenia is dual-licensed Apache-2.0 and SSPL. The SSPL terms matter if you would ever offer Lucenia as a service to third parties, so check the license against your intended use.

#### Other considerations

**Moving from AWS.** The cluster starts empty; indices are not copied automatically. Restore from a snapshot or reindex from the source before you move traffic.

**Before going live.** Test the plugin APIs your app calls, and the Lucenia version you will run, before switching traffic. Plan how you will apply upgrades, since 0.x releases can move quickly.

**What to monitor.** Latency and throughput are the cluster's own, and your monitoring reports them; no provider dashboard or SLA covers this cluster.

## On DigitalOcean and Google Cloud

### Elastic Cloud (managed)

| Operation | Area | Support | Depth | Notes |
| - | - | - | - | - |
| Cluster health / stats / \_cat APIs | Cluster | Supported | Most usage | - |
| Tasks API (\_tasks) | Cluster | Supported | Full surface | drives async reindex / update-by-query |
| Bulk (\_bulk) | Documents | Supported | Common | batch index/update/delete |
| Delete document | Documents | Supported | Common | - |
| Get document (GET /\{index}/\_doc/\{id}) | Documents | Supported | Common | - |
| Index document (PUT/POST /\{index}/\_doc) | Documents | Supported | Common | - |
| Multi-get (\_mget) | Documents | Supported | Most usage | - |
| Update document (\_update) | Documents | Supported | Common | - |
| Snapshots / backups (\_snapshot) | Durability | Partial | Full surface | Elastic SLM - a different API |
| Aliases (\_aliases) | Index management | Supported | Most usage | - |
| Analyze (\_analyze) | Index management | Supported | Full surface | tokenizer/analyzer testing |
| Create / Delete / Get index | Index management | Supported | Common | - |
| Data streams (\_data\_stream) | Index management | Supported | Full surface | - |
| Open / Close index | Index management | Supported | Full surface | - |
| Put / Get mapping | Index management | Supported | Common | - |
| Refresh / Flush / Forcemerge | Index management | Supported | Most usage | - |
| Rollover / Shrink / Split / Clone | Index management | Supported | Full surface | - |
| Update / Get settings | Index management | Supported | Most usage | - |
| Index & component templates (\_index\_template / \_component\_template) | Ingest & templates | Supported | Full surface | - |
| Ingest pipelines (\_ingest/pipeline: put / get / delete / \_simulate) | Ingest & templates | Supported | Full surface | - |
| License / X-Pack (\_license, \_xpack) | Licensing | Out of scope | Full surface | Elasticsearch licensing endpoints are outside the OpenSearch mapping. |
| Index State Management (\_plugins/\_ism) | Lifecycle | Adapter-served | Full surface | Maps representable ISM actions to ILM phases; custom states and transitions cannot round-trip. |
| Alerting / anomaly detection / ML Commons (\_plugins/\*) | Observability & ML | Adapter-served | Full surface | ES-native \_ml/\_watcher, several Platinum-gated; notifications/observability have no ES REST equivalent |
| Notifications / observability (\_plugins/\_notifications, \_plugins/\_observability) | Observability & ML | Out of scope | Full surface | These OpenSearch APIs are outside the Elasticsearch mapping; use backend-native configuration or change the application. |
| PPL (\_plugins/\_ppl) | Query languages | Out of scope | Full surface | no PPL in Elasticsearch; ES\|QL is a different language |
| SQL (\_plugins/\_sql) | Query languages | Adapter-served | Full surface | ES \_sql at a different path/shape |
| Stored scripts & Painless (\_scripts, \_scripts/painless/\_execute) | Scripting | Supported | Full surface | - |
| Aggregations | Search | Supported | Common | metrics + bucket aggregations in \_search |
| Count / Explain / Suggest | Search | Supported | Most usage | - |
| Field capabilities (\_field\_caps) | Search | Supported | Full surface | - |
| Multi-search (\_msearch) | Search | Supported | Most usage | - |
| Point-in-time (\_search/point\_in\_time) | Search | Partial | Most usage | ES uses \_pit, not \_search/point\_in\_time - path rewrite |
| Reindex / Update-by-query / Delete-by-query | Search | Supported | Full surface | - |
| Scroll (\_search/scroll) | Search | Supported | Most usage | deep pagination |
| Search (\_search + query DSL) | Search | Supported | Common | - |
| Search templates (\_search/template, \_render/template) | Search | Supported | Full surface | - |
| Term vectors (\_termvectors / \_mtermvectors) | Search | Supported | Full surface | - |
| Security plugin / fine-grained access control (\_plugins/\_security) | Security | Out of scope | Full surface | disjoint API + model - \_security/\* vs \_plugins/\_security/\*; some OpenSearch-free FLS/DLS/multi-tenancy are Platinum-gated or absent on ES |
| Vector search / k-NN (knn\_vector, \_plugins/\_knn) | Vector & ML | Adapter-served | Full surface | rewrite knn\_vector→dense\_vector, OpenSearch knn query→ES knn option |

#### How it works

Your application keeps its OpenSearch client. Its requests go to a Tensor9 adapter, which translates the supported APIs and authentication and sends them to an Elastic Cloud Hosted deployment running Elasticsearch 8.x. Tensor9 provisions the deployment as an `ec_deployment` resource in your Google Cloud environment. Elastic operates Elasticsearch and Kibana; you choose the deployment configuration.

![Your application's OpenSearch requests go to the Tensor9 adapter, which translates them and sends them to Elastic Cloud Hosted.](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTAwIiBoZWlnaHQ9IjE4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOTAwIDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJZb3VyIGFwcGxpY2F0aW9uJ3MgT3BlblNlYXJjaCByZXF1ZXN0cyBnbyB0byB0aGUgVGVuc29yOSBhZGFwdGVyLCB3aGljaCB0cmFuc2xhdGVzIHRoZW0gYW5kIHNlbmRzIHRoZW0gdG8gRWxhc3RpYyBDbG91ZCBIb3N0ZWQuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9Im9zLXJvdXRlIiBtYXJrZXJXaWR0aD0iOCIgbWFya2VySGVpZ2h0PSI4IiByZWZYPSI3IiByZWZZPSI0IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wLDAgTDgsNCBMMCw4IFoiIHN0eWxlPSJmaWxsOiM2NDc0OGIiLz48L21hcmtlcj48L2RlZnM+CjxnIHN0eWxlPSJzdHJva2U6Izk0YTNiOCI+PHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjEwMCIgcng9IjEwIiBzdHlsZT0iZmlsbDojZjhmYWZjIi8+PHJlY3QgeD0iMzMwIiB5PSI0MCIgd2lkdGg9IjI0MCIgaGVpZ2h0PSIxMDAiIHJ4PSIxMCIgc3R5bGU9ImZpbGw6I2Y4ZmFmYyIvPjxyZWN0IHg9IjY0MCIgeT0iNDAiIHdpZHRoPSIyNDAiIGhlaWdodD0iMTAwIiByeD0iMTAiIHN0eWxlPSJmaWxsOiNmOGZhZmMiLz48L2c+CjxnIGZvbnQtZmFtaWx5PSJzeXN0ZW0tdWksc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZpbGw6IzBmMTcyYSI+PHRleHQgeD0iMTQwIiB5PSI3OCI+WW91ciBhcHBsaWNhdGlvbjwvdGV4dD48dGV4dCB4PSI0NTAiIHk9Ijc4Ij5UZW5zb3I5IGFkYXB0ZXI8L3RleHQ+PHRleHQgeD0iNzYwIiB5PSI3OCI+RWxhc3RpYyBDbG91ZCBIb3N0ZWQ8L3RleHQ+PC9nPgo8ZyBmb250LWZhbWlseT0ic3lzdGVtLXVpLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmaWxsOiMzMzQxNTUiPjx0ZXh0IHg9IjE0MCIgeT0iMTA4Ij5PcGVuU2VhcmNoIGNsaWVudDwvdGV4dD48dGV4dCB4PSI0NTAiIHk9IjEwOCI+VHJhbnNsYXRlcyByZXF1ZXN0czwvdGV4dD48dGV4dCB4PSI3NjAiIHk9IjEwOCI+SW5kZXhlcyBhbmQgc2VhcmNoPC90ZXh0PjwvZz4KPGcgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI29zLXJvdXRlKSIgc3R5bGU9InN0cm9rZTojNjQ3NDhiIj48cGF0aCBkPSJNMjYwIDkwIEgzMjUiLz48cGF0aCBkPSJNNTcwIDkwIEg2MzUiLz48L2c+Cjwvc3ZnPg==)

![Your application's OpenSearch requests go to the Tensor9 adapter, which translates them and sends them to Elastic Cloud Hosted.](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTAwIiBoZWlnaHQ9IjE4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOTAwIDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJZb3VyIGFwcGxpY2F0aW9uJ3MgT3BlblNlYXJjaCByZXF1ZXN0cyBnbyB0byB0aGUgVGVuc29yOSBhZGFwdGVyLCB3aGljaCB0cmFuc2xhdGVzIHRoZW0gYW5kIHNlbmRzIHRoZW0gdG8gRWxhc3RpYyBDbG91ZCBIb3N0ZWQuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9Im9zLXJvdXRlIiBtYXJrZXJXaWR0aD0iOCIgbWFya2VySGVpZ2h0PSI4IiByZWZYPSI3IiByZWZZPSI0IiBvcmllbnQ9ImF1dG8iPjxwYXRoIGQ9Ik0wLDAgTDgsNCBMMCw4IFoiIHN0eWxlPSJmaWxsOiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxnIHN0eWxlPSJzdHJva2U6IzY0NzQ4YiI+PHJlY3QgeD0iMjAiIHk9IjQwIiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjEwMCIgcng9IjEwIiBzdHlsZT0iZmlsbDojMGYxNzJhIi8+PHJlY3QgeD0iMzMwIiB5PSI0MCIgd2lkdGg9IjI0MCIgaGVpZ2h0PSIxMDAiIHJ4PSIxMCIgc3R5bGU9ImZpbGw6IzBmMTcyYSIvPjxyZWN0IHg9IjY0MCIgeT0iNDAiIHdpZHRoPSIyNDAiIGhlaWdodD0iMTAwIiByeD0iMTAiIHN0eWxlPSJmaWxsOiMwZjE3MmEiLz48L2c+CjxnIGZvbnQtZmFtaWx5PSJzeXN0ZW0tdWksc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZpbGw6I2YxZjVmOSI+PHRleHQgeD0iMTQwIiB5PSI3OCI+WW91ciBhcHBsaWNhdGlvbjwvdGV4dD48dGV4dCB4PSI0NTAiIHk9Ijc4Ij5UZW5zb3I5IGFkYXB0ZXI8L3RleHQ+PHRleHQgeD0iNzYwIiB5PSI3OCI+RWxhc3RpYyBDbG91ZCBIb3N0ZWQ8L3RleHQ+PC9nPgo8ZyBmb250LWZhbWlseT0ic3lzdGVtLXVpLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmaWxsOiNjYmQ1ZTEiPjx0ZXh0IHg9IjE0MCIgeT0iMTA4Ij5PcGVuU2VhcmNoIGNsaWVudDwvdGV4dD48dGV4dCB4PSI0NTAiIHk9IjEwOCI+VHJhbnNsYXRlcyByZXF1ZXN0czwvdGV4dD48dGV4dCB4PSI3NjAiIHk9IjEwOCI+SW5kZXhlcyBhbmQgc2VhcmNoPC90ZXh0PjwvZz4KPGcgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI29zLXJvdXRlKSIgc3R5bGU9InN0cm9rZTojOTRhM2I4Ij48cGF0aCBkPSJNMjYwIDkwIEgzMjUiLz48cGF0aCBkPSJNNTcwIDkwIEg2MzUiLz48L2c+Cjwvc3ZnPg==)

#### Requests and authentication

The adapter forwards the supported document, search, aggregation, index, cluster, ingest and scripting operations, translating request and response differences. For example, the point-in-time path `_search/point_in_time` becomes `_pit`. The adapter checks AWS SigV4 signatures; its requests to Elasticsearch use Elastic credentials or API keys. You configure backend permissions in Elastic's security model.

Elasticsearch 8.x accepts `compatible-with=7` headers for its earlier REST API, and the adapter uses them where they apply. This does not make every OpenSearch request or client version compatible. Check your queries, response parsing and client behavior against the listed operations. See [Elastic's API compatibility documentation](https://www.elastic.co/docs/reference/elasticsearch/rest-apis/compatibility).

#### Plugin features

OpenSearch and Elasticsearch have different plugin APIs, so the adapter translates them: - **k-NN.** `knn_vector` mappings become `dense_vector`, and queries become Elasticsearch's `knn` form. - **SQL.** Requests to `_plugins/_sql` go to `_sql`, with response fields translated. - **Index State Management.** Policies map to Elasticsearch Index Lifecycle Management (ILM) where their actions fit. - **Alerting, anomaly detection and machine learning.** These map to Elasticsearch `_watcher` and `_ml`. Some of them need a commercial Elastic subscription.

#### Deployment, availability and security

The `ec_deployment` resource exposes hot, warm, cold and frozen tiers, instance size, one to three availability zones, and autoscaling per tier. Storage comes bundled at the selected tier's disk-to-memory ratio. Elastic Cloud publishes monthly availability commitments of 99.5%, 99.9% and 99.95% for one-, two- and three-zone deployments, subject to the subscription and its high-availability conditions. Choose topology and subscription together.

Access control uses Elastic's security configuration, API keys and single sign-on, not OpenSearch Security roles. Document- and field-level security and other commercial features depend on the subscription you buy. The hosted offering's subscription terms apply regardless of the source-code license. Elastic added an AGPLv3 option for the free source portions in 2024; see its [licensing FAQ](https://www.elastic.co/pricing/faq/licensing/).

#### Limitations

* **Some OpenSearch APIs are not supported.** PPL, the OpenSearch Security API, notifications and observability objects are outside the mapping. They need Elastic-native configuration or a change in your application.
* **Index State Management behaves differently: custom states are not kept.** ILM has fixed phases, so custom ISM states and transitions cannot be represented and do not round-trip.
* **Restoring OpenSearch snapshots is not a supported migration path.** Do not assume an OpenSearch snapshot restores into Elasticsearch across the engine fork. Move data with a reindex or bulk import instead.
* **Elasticsearch licensing APIs are not supported.** `_license` and `_xpack` are not OpenSearch APIs and are not part of the mapping.

#### Other considerations

**Moving from AWS.** The deployment starts empty. Move data with a compatible remote reindex or a bulk export and import. Review mappings, analyzers and index settings before loading data, and test representative queries before you switch traffic.

**Backups.** Elastic Snapshot Lifecycle Management sets backup schedules and retention. Make sure it meets the recovery requirements you had with AWS-managed snapshots.

**Sizing.** Choose shard layout, replicas, data tiers and memory for your indexing and query load. Published engine benchmarks describe their own versions and datasets, not this mapping. Measure your deployed application, including translated operations, when choosing capacity.

## On OCI

### OCI Search with OpenSearch

| Operation | Area | Support | Depth | Notes |
| - | - | - | - | - |
| Cluster health / stats / \_cat APIs | Cluster | Supported | Most usage | - |
| Tasks API (\_tasks) | Cluster | Supported | Full surface | drives async reindex / update-by-query |
| Bulk (\_bulk) | Documents | Supported | Common | batch index/update/delete |
| Delete document | Documents | Supported | Common | - |
| Get document (GET /\{index}/\_doc/\{id}) | Documents | Supported | Common | - |
| Index document (PUT/POST /\{index}/\_doc) | Documents | Supported | Common | - |
| Multi-get (\_mget) | Documents | Supported | Most usage | - |
| Update document (\_update) | Documents | Supported | Common | - |
| Snapshots / backups (\_snapshot) | Durability | Partial | Full surface | managed daily backups (14-day retention, non-configurable) + the manual \_snapshot API to an Object Storage bucket in your tenancy - a different model from AWS managed snapshots |
| Aliases (\_aliases) | Index management | Supported | Most usage | - |
| Analyze (\_analyze) | Index management | Supported | Full surface | tokenizer/analyzer testing |
| Create / Delete / Get index | Index management | Supported | Common | - |
| Data streams (\_data\_stream) | Index management | Supported | Full surface | - |
| Open / Close index | Index management | Supported | Full surface | - |
| Put / Get mapping | Index management | Supported | Common | - |
| Refresh / Flush / Forcemerge | Index management | Supported | Most usage | - |
| Rollover / Shrink / Split / Clone | Index management | Supported | Full surface | - |
| Update / Get settings | Index management | Supported | Most usage | - |
| Index & component templates (\_index\_template / \_component\_template) | Ingest & templates | Supported | Full surface | - |
| Ingest pipelines (\_ingest/pipeline: put / get / delete / \_simulate) | Ingest & templates | Supported | Full surface | - |
| License / X-Pack (\_license, \_xpack) | Licensing | Out of scope | Full surface | Elasticsearch licensing endpoints \_license and \_xpack are not OpenSearch APIs. |
| Index State Management (\_plugins/\_ism) | Lifecycle | Supported | Full surface | Index Management (ISM) is a supported OCI Search plugin |
| Alerting / anomaly detection / ML Commons (\_plugins/\*) | Observability & ML | Supported | Full surface | Alerting, Anomaly Detection, ML Commons, Neural Search, Notifications, Observability, Security Analytics are all supported OCI Search plugins |
| Notifications / observability (\_plugins/\_notifications, \_plugins/\_observability) | Observability & ML | Supported | Full surface | Alerting, Anomaly Detection, ML Commons, Neural Search, Notifications, Observability, Security Analytics are all supported OCI Search plugins |
| PPL (\_plugins/\_ppl) | Query languages | Supported | Full surface | PPL ships with the supported SQL plugin |
| SQL (\_plugins/\_sql) | Query languages | Supported | Full surface | the SQL plugin is supported on OCI Search |
| Stored scripts & Painless (\_scripts, \_scripts/painless/\_execute) | Scripting | Supported | Full surface | - |
| Aggregations | Search | Supported | Common | metrics + bucket aggregations in \_search |
| Count / Explain / Suggest | Search | Supported | Most usage | - |
| Field capabilities (\_field\_caps) | Search | Supported | Full surface | - |
| Multi-search (\_msearch) | Search | Supported | Most usage | - |
| Point-in-time (\_search/point\_in\_time) | Search | Supported | Most usage | native - OpenSearch engine |
| Reindex / Update-by-query / Delete-by-query | Search | Supported | Full surface | - |
| Scroll (\_search/scroll) | Search | Supported | Most usage | deep pagination |
| Search (\_search + query DSL) | Search | Supported | Common | - |
| Search templates (\_search/template, \_render/template) | Search | Supported | Full surface | - |
| Term vectors (\_termvectors / \_mtermvectors) | Search | Supported | Full surface | - |
| Security plugin / fine-grained access control (\_plugins/\_security) | Security | Partial | Full surface | the OpenSearch Security plugin runs (RBAC, SAML/LDAP/OIDC, DLS/FLS), but AWS FGAC's IAM/master-user model is re-expressed as OCI's security\_mode (ENFORCING) + a master user - not the IAM access\_policies |
| Vector search / k-NN (knn\_vector, \_plugins/\_knn) | Vector & ML | Supported | Full surface | k-NN is a supported OCI Search plugin |

#### How it works

Your application keeps its OpenSearch client and requests. Tensor9 provisions OCI Search with OpenSearch in the customer's Oracle Cloud tenancy and points the application at the cluster's `opensearch_fqdn` endpoint. Document and search requests go straight to the managed cluster; Tensor9 is not in the request path. Oracle operates the OpenSearch service.

![Application requests reach OCI Search with OpenSearch directly through its OpenSearch endpoint. Tensor9 provisions the cluster and configures its endpoint.](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTAwIiBoZWlnaHQ9IjE4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOTAwIDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcHBsaWNhdGlvbiByZXF1ZXN0cyByZWFjaCBPQ0kgU2VhcmNoIHdpdGggT3BlblNlYXJjaCBkaXJlY3RseSB0aHJvdWdoIGl0cyBPcGVuU2VhcmNoIGVuZHBvaW50LiBUZW5zb3I5IHByb3Zpc2lvbnMgdGhlIGNsdXN0ZXIgYW5kIGNvbmZpZ3VyZXMgaXRzIGVuZHBvaW50LiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJvcy1yb3V0ZSIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iOCIgcmVmWD0iNyIgcmVmWT0iNCIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCwwIEw4LDQgTDAsOCBaIiBzdHlsZT0iZmlsbDojNjQ3NDhiIi8+PC9tYXJrZXI+PC9kZWZzPgo8ZyBzdHlsZT0ic3Ryb2tlOiM5NGEzYjgiPjxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjI0MCIgaGVpZ2h0PSIxMDAiIHJ4PSIxMCIgc3R5bGU9ImZpbGw6I2Y4ZmFmYyIvPjxyZWN0IHg9IjMzMCIgeT0iNDAiIHdpZHRoPSIyNDAiIGhlaWdodD0iMTAwIiByeD0iMTAiIHN0eWxlPSJmaWxsOiNmOGZhZmMiLz48cmVjdCB4PSI2NDAiIHk9IjQwIiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjEwMCIgcng9IjEwIiBzdHlsZT0iZmlsbDojZjhmYWZjIi8+PC9nPgo8ZyBmb250LWZhbWlseT0ic3lzdGVtLXVpLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmaWxsOiMwZjE3MmEiPjx0ZXh0IHg9IjE0MCIgeT0iNzgiPkFwcGxpY2F0aW9uPC90ZXh0Pjx0ZXh0IHg9IjQ1MCIgeT0iNzgiPkNvbmZpZ3VyZWQgZW5kcG9pbnQ8L3RleHQ+PHRleHQgeD0iNzYwIiB5PSI3OCI+T0NJIFNlYXJjaCB3aXRoIE9wZW5TZWFyY2g8L3RleHQ+PC9nPgo8ZyBmb250LWZhbWlseT0ic3lzdGVtLXVpLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmaWxsOiMzMzQxNTUiPjx0ZXh0IHg9IjE0MCIgeT0iMTA4Ij5PcGVuU2VhcmNoIGNsaWVudDwvdGV4dD48dGV4dCB4PSI0NTAiIHk9IjEwOCI+RGlyZWN0IHJlcXVlc3RzPC90ZXh0Pjx0ZXh0IHg9Ijc2MCIgeT0iMTA4Ij5JbmRleGVzIGFuZCBzZWFyY2g8L3RleHQ+PC9nPgo8ZyBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjb3Mtcm91dGUpIiBzdHlsZT0ic3Ryb2tlOiM2NDc0OGIiPjxwYXRoIGQ9Ik0yNjAgOTAgSDMyNSIvPjxwYXRoIGQ9Ik01NzAgOTAgSDYzNSIvPjwvZz4KPC9zdmc+)

![Application requests reach OCI Search with OpenSearch directly through its OpenSearch endpoint. Tensor9 provisions the cluster and configures its endpoint.](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTAwIiBoZWlnaHQ9IjE4MCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOTAwIDE4MCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBcHBsaWNhdGlvbiByZXF1ZXN0cyByZWFjaCBPQ0kgU2VhcmNoIHdpdGggT3BlblNlYXJjaCBkaXJlY3RseSB0aHJvdWdoIGl0cyBPcGVuU2VhcmNoIGVuZHBvaW50LiBUZW5zb3I5IHByb3Zpc2lvbnMgdGhlIGNsdXN0ZXIgYW5kIGNvbmZpZ3VyZXMgaXRzIGVuZHBvaW50LiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJvcy1yb3V0ZSIgbWFya2VyV2lkdGg9IjgiIG1hcmtlckhlaWdodD0iOCIgcmVmWD0iNyIgcmVmWT0iNCIgb3JpZW50PSJhdXRvIj48cGF0aCBkPSJNMCwwIEw4LDQgTDAsOCBaIiBzdHlsZT0iZmlsbDojOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8ZyBzdHlsZT0ic3Ryb2tlOiM2NDc0OGIiPjxyZWN0IHg9IjIwIiB5PSI0MCIgd2lkdGg9IjI0MCIgaGVpZ2h0PSIxMDAiIHJ4PSIxMCIgc3R5bGU9ImZpbGw6IzBmMTcyYSIvPjxyZWN0IHg9IjMzMCIgeT0iNDAiIHdpZHRoPSIyNDAiIGhlaWdodD0iMTAwIiByeD0iMTAiIHN0eWxlPSJmaWxsOiMwZjE3MmEiLz48cmVjdCB4PSI2NDAiIHk9IjQwIiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjEwMCIgcng9IjEwIiBzdHlsZT0iZmlsbDojMGYxNzJhIi8+PC9nPgo8ZyBmb250LWZhbWlseT0ic3lzdGVtLXVpLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmaWxsOiNmMWY1ZjkiPjx0ZXh0IHg9IjE0MCIgeT0iNzgiPkFwcGxpY2F0aW9uPC90ZXh0Pjx0ZXh0IHg9IjQ1MCIgeT0iNzgiPkNvbmZpZ3VyZWQgZW5kcG9pbnQ8L3RleHQ+PHRleHQgeD0iNzYwIiB5PSI3OCI+T0NJIFNlYXJjaCB3aXRoIE9wZW5TZWFyY2g8L3RleHQ+PC9nPgo8ZyBmb250LWZhbWlseT0ic3lzdGVtLXVpLHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmaWxsOiNjYmQ1ZTEiPjx0ZXh0IHg9IjE0MCIgeT0iMTA4Ij5PcGVuU2VhcmNoIGNsaWVudDwvdGV4dD48dGV4dCB4PSI0NTAiIHk9IjEwOCI+RGlyZWN0IHJlcXVlc3RzPC90ZXh0Pjx0ZXh0IHg9Ijc2MCIgeT0iMTA4Ij5JbmRleGVzIGFuZCBzZWFyY2g8L3RleHQ+PC9nPgo8ZyBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjb3Mtcm91dGUpIiBzdHlsZT0ic3Ryb2tlOiM5NGEzYjgiPjxwYXRoIGQ9Ik0yNjAgOTAgSDMyNSIvPjxwYXRoIGQ9Ik01NzAgOTAgSDYzNSIvPjwvZz4KPC9zdmc+)

#### Engine and plugins

OCI runs OpenSearch itself, not a fork. The listed core REST operations and the supported plugins use the native OpenSearch APIs, including k-NN, SQL/PPL, Index State Management, Alerting, Anomaly Detection, ML Commons, Neural Search and Security Analytics.

OCI documents versions 2.11, 2.15, 2.18, 2.19.1, 3.2 and 3.6. Match the engine and plugin versions to your application before migrating. The same engine on another provider still needs a version-compatibility review; it does not guarantee identical behaviour for every request.

#### Topology and security

You size the data, leader and OpenSearch Dashboards nodes, with optional coordinator, machine-learning and search tiers. The cluster runs in the customer's VCN and subnet. Oracle manages the software and spreads data nodes across availability domains.

Access control uses the OpenSearch Security plugin, with `security_mode` set to `ENFORCING` and a master user. It supports SAML, LDAP and OIDC sign-in, and document- and field-level security on supported versions.

#### Limitations

Where Amazon OpenSearch Service and OCI differ

* **AWS IAM access policies are not supported.** Domain `access_policies` do not apply directly. On OCI, access control goes through the Security plugin described above.
* **Customer-managed encryption keys are not supported.** OCI manages storage encryption, and this mapping has no per-domain AWS KMS key setting.
* **Elasticsearch `_license` and `_xpack` endpoints are not supported.** They are not part of OpenSearch.
* **Backups behave differently: OCI keeps daily backups for 14 days.** You cannot change that schedule or retention. For other recovery points, use the Snapshot API with an Object Storage repository in the customer tenancy.
* **Availability behaves differently: OCI states a 99.9% objective, not a contractual SLA.** Node placement and replicas provide high availability. Check the current OCI service terms for the customer deployment.
* **AWS sizing settings are not kept.** The service uses Oracle compute and storage shapes, with the limits listed in the comparison. AWS instance families, EBS limits and UltraWarm settings are not interchangeable with them.

#### Other considerations

**Before going live.** Set up your recovery destinations and test a restore. Measure your workload on the chosen topology, and keep enough storage and replica capacity.

**Moving from AWS.** The new cluster starts empty; OCI does not import the AWS domain's indexes. Restore a compatible snapshot through a registered repository, or reindex from the source. Check mappings, analyzers, queries and the Security plugin configuration before you switch the endpoint.

## On Scaleway

### Scaleway Cloud Essentials for OpenSearch

| Operation | Area | Support | Depth | Notes |
| - | - | - | - | - |
| Cluster health / stats / \_cat APIs | Cluster | Supported | Most usage | - |
| Tasks API (\_tasks) | Cluster | Supported | Full surface | drives async reindex / update-by-query |
| Bulk (\_bulk) | Documents | Supported | Common | batch index/update/delete |
| Delete document | Documents | Supported | Common | - |
| Get document (GET /\{index}/\_doc/\{id}) | Documents | Supported | Common | - |
| Index document (PUT/POST /\{index}/\_doc) | Documents | Supported | Common | - |
| Multi-get (\_mget) | Documents | Supported | Most usage | - |
| Update document (\_update) | Documents | Supported | Common | - |
| Snapshots / backups (\_snapshot) | Durability | Partial | Full surface | Scaleway's own backup model rather than AWS managed snapshots; the \_snapshot API remains available against a repository you configure |
| Aliases (\_aliases) | Index management | Supported | Most usage | - |
| Analyze (\_analyze) | Index management | Supported | Full surface | tokenizer/analyzer testing |
| Create / Delete / Get index | Index management | Supported | Common | - |
| Data streams (\_data\_stream) | Index management | Supported | Full surface | - |
| Open / Close index | Index management | Supported | Full surface | - |
| Put / Get mapping | Index management | Supported | Common | - |
| Refresh / Flush / Forcemerge | Index management | Supported | Most usage | - |
| Rollover / Shrink / Split / Clone | Index management | Supported | Full surface | - |
| Update / Get settings | Index management | Supported | Most usage | - |
| Index & component templates (\_index\_template / \_component\_template) | Ingest & templates | Supported | Full surface | - |
| Ingest pipelines (\_ingest/pipeline: put / get / delete / \_simulate) | Ingest & templates | Supported | Full surface | - |
| License / X-Pack (\_license, \_xpack) | Licensing | Supported | Full surface | no license API - OpenSearch (Apache-2.0) |
| Index State Management (\_plugins/\_ism) | Lifecycle | Supported | Full surface | Index State Management runs natively via the ISM plugin |
| Alerting / anomaly detection / ML Commons (\_plugins/\*) | Observability & ML | Supported | Full surface | Alerting, Anomaly Detection and ML Commons ship in the distribution |
| Notifications / observability (\_plugins/\_notifications, \_plugins/\_observability) | Observability & ML | Supported | Full surface | Alerting, Anomaly Detection and ML Commons ship in the distribution |
| PPL (\_plugins/\_ppl) | Query languages | Supported | Full surface | PPL (\_plugins/\_ppl) ships in the distribution |
| SQL (\_plugins/\_sql) | Query languages | Supported | Full surface | the SQL plugin (\_plugins/\_sql) ships in the distribution |
| Stored scripts & Painless (\_scripts, \_scripts/painless/\_execute) | Scripting | Supported | Full surface | - |
| Aggregations | Search | Supported | Common | metrics + bucket aggregations in \_search |
| Count / Explain / Suggest | Search | Supported | Most usage | - |
| Field capabilities (\_field\_caps) | Search | Supported | Full surface | - |
| Multi-search (\_msearch) | Search | Supported | Most usage | - |
| Point-in-time (\_search/point\_in\_time) | Search | Supported | Most usage | native - a real OpenSearch engine, not a compatible API layer |
| Reindex / Update-by-query / Delete-by-query | Search | Supported | Full surface | - |
| Scroll (\_search/scroll) | Search | Supported | Most usage | deep pagination |
| Search (\_search + query DSL) | Search | Supported | Common | - |
| Search templates (\_search/template, \_render/template) | Search | Supported | Full surface | - |
| Term vectors (\_termvectors / \_mtermvectors) | Search | Supported | Full surface | - |
| Security plugin / fine-grained access control (\_plugins/\_security) | Security | Partial | Full surface | the Security plugin is present, but Scaleway's deployment exposes a single user\_name/password pair - per-index and per-role authorization is configured INSIDE OpenSearch rather than by the cloud, and the domain's IAM resource policy has no counterpart at all |
| Vector search / k-NN (knn\_vector, \_plugins/\_knn) | Vector & ML | Supported | Full surface | k-NN and Neural search ship in the OpenSearch distribution |

## Install and run

The documentation and SLAs are public. Downloading and running the Cloud Adapter binary requires an entitled customer account. Set `T9_API_KEY` as described in [Install and Authenticate](https://docs.tensor9.com/cloud-adapter-early-access/getting-started/install-and-authenticate.md), then list the adapters your account may use with this origin:

```sh theme={null}
tensor9 adapt svc list \
  -origin aws::1.0.0::opensearch::domain
```

The result is limited to directed mappings for this origin that your account is entitled to use. Use a returned backend identifier when configuring the adapter or investigating a request.

Request binary access from [hello@tensor9.com](mailto:hello@tensor9.com) if your account does not yet include this direction.

## Existing data and credentials

Selecting a backend does not copy existing data, credentials or access policies. Plan and verify migration separately before changing an application's endpoint. Do not assume an identifier, credential or encrypted value from the origin service works unchanged on the target.

## Configure, tune and debug

Start with [setup](https://docs.tensor9.com/cloud-adapter-early-access/getting-started/overview.md) and [configuration](https://docs.tensor9.com/cloud-adapter-early-access/configuration/overview.md). Use [tuning](https://docs.tensor9.com/cloud-adapter-early-access/tuning/overview.md) to understand supported request tags, [debugging](https://docs.tensor9.com/cloud-adapter-early-access/debugging/overview.md) to investigate a request, and [High Fidelity Cloud Emulators](https://docs.tensor9.com/cloud-adapter-early-access/local-testing/overview.md) to validate a bounded reproduction.

For requests that go through an entitled service adapter, use [tensor9 explain](https://docs.tensor9.com/cloud-adapter-early-access/debugging/explain.md) and [x-t9-explain](https://docs.tensor9.com/cloud-adapter-early-access/debugging/response-headers.md) to inspect the selected mapping.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.