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

# OpenSearch

> Resources, examples, configuration and evidence for OpenSearch.

Use the `@bijection/connectors/opensearch` entrypoint to declare OpenSearch resources.

## Availability

This page describes the pinned source package. Published availability is unestablished for this artifact. [Source build and package availability](https://docs.bijection.com/client/sdk-distribution.md).

## Resources and modes

| Resource | Mode | Description |
| - | - | - |
| Index | `scan` | scan |

Declare a resource in application code, then bind deployment-specific settings and credentials. See [typed resources](https://docs.bijection.com/integrations/resources.md), [connections](https://docs.bijection.com/integrations/connections.md) and [source inspection](https://docs.bijection.com/integrations/cli.md).

## Index

### scan: scan

The following example matches configuration `standard`.

```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
import { opensearch } from "@bijection/connectors/opensearch";
export const source = opensearch.index.scan({ deletions: { everyHours: 24 } });
```

> **Inferred record types**
>
> ```ts theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "key": string;
>   "document": any;
> }
> ```

#### Configuration: standard

Case: `opensearch/index/scan/standard`.

Connection and resource configuration are declared by this exact case.

Credential kind: `opensearch`. Keep credential material in the private credential inventory.

| Setting | Type | Required | Owner |
| - | - | - | - |
| `endpoint` | string | Yes | Shared connection |
| `index` | string | Yes | Resource binding |

> **Complete configuration contract**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "setup": [],
>   "resource": {
>     "access": {},
>     "defaults": {},
>     "connector": "opensearch",
>     "output": {
>       "kind": "single",
>       "collection": "records"
>     },
>     "credential_kind": "opensearch",
>     "connection_fields": [
>       "endpoint"
>     ]
>   },
>   "connection_setup": {
>     "type": "object",
>     "value": {
>       "endpoint": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       },
>       "index": {
>         "fieldType": {
>           "type": "string"
>         },
>         "optional": false
>       }
>     }
>   },
>   "execution": null
> }
> ```

Native admission analysis is available for this exact declaration.

**Collection: records**

| Contract | Meaning |
| - | - |
| Initial | Pinned snapshot |
| Changes | Repeated observations of current records |
| Deletions | Reconciliation |
| Resume | Opaque cursor |
| Gap | Explicit repair required after a gap |
| Retention | Unspecified |

> **Complete native profile**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "movement": {
>     "exchanges": {},
>     "nativeInputLimitBytes": "0",
>     "steps": [
>       {
>         "id": "acquire.1",
>         "inputs": [],
>         "action": {
>           "operation": "acquire",
>           "subject": "native input",
>           "limitBytes": "0"
>         }
>       },
>       {
>         "id": "retain.1",
>         "inputs": [
>           "acquire.1"
>         ],
>         "action": {
>           "operation": "retain",
>           "subject": "acquisition evidence",
>           "reason": "recovery",
>           "release": "acquisition_custody"
>         }
>       },
>       {
>         "id": "interpret.1",
>         "inputs": [
>           "retain.1"
>         ],
>         "action": {
>           "operation": "interpret",
>           "subject": "acquired input",
>           "produces": "records"
>         }
>       },
>       {
>         "id": "materialize.1",
>         "inputs": [
>           "interpret.1"
>         ],
>         "action": {
>           "operation": "materialize",
>           "subject": "source rows",
>           "reason": "serving",
>           "release": "replacement"
>         }
>       },
>       {
>         "id": "publish.1",
>         "inputs": [
>           "materialize.1"
>         ],
>         "action": {
>           "operation": "publish",
>           "subject": "source rows",
>           "visibility": "with_acquisition"
>         }
>       }
>     ]
>   },
>   "initial": "pinned_snapshot",
>   "changes": "observations",
>   "deletions": "reconciliation",
>   "resume": "opaque_cursor",
>   "retentionMs": null,
>   "gap": "explicit_repair",
>   "limits": {
>     "deletion_sweep_hours": "24",
>     "exchange_evidence_bytes": "524288",
>     "publication_page_records": "128",
>     "record_fields": "32"
>   },
>   "restrictions": [
>     "Repeated point-in-time scans in shard document order; an index keeps no deletion tombstones, so no incremental read is claimed",
>     "Deletions are published when a key lookup answers absent; a sweep runs at most every deletion_sweep_hours"
>   ],
>   "commands": {}
> }
> ```

> **Commands, occurrences and artifacts**
>
> ```json theme={"theme":{"light":"github-light-default","dark":"github-dark-default"}}
> {
>   "records": {
>     "records": {
>       "protocol": "record_observation",
>       "coverage": "records",
>       "consistency": "observations",
>       "atomicity": "record",
>       "history": "observations",
>       "recordRefresh": false,
>       "reconciliation": false,
>       "notifications": false,
>       "snapshotMaxRows": null,
>       "profile": {
>         "movement": {
>           "exchanges": {},
>           "nativeInputLimitBytes": "0",
>           "steps": [
>             {
>               "id": "acquire.1",
>               "inputs": [],
>               "action": {
>                 "operation": "acquire",
>                 "subject": "native input",
>                 "limitBytes": "0"
>               }
>             },
>             {
>               "id": "retain.1",
>               "inputs": [
>                 "acquire.1"
>               ],
>               "action": {
>                 "operation": "retain",
>                 "subject": "acquisition evidence",
>                 "reason": "recovery",
>                 "release": "acquisition_custody"
>               }
>             },
>             {
>               "id": "interpret.1",
>               "inputs": [
>                 "retain.1"
>               ],
>               "action": {
>                 "operation": "interpret",
>                 "subject": "acquired input",
>                 "produces": "records"
>               }
>             },
>             {
>               "id": "materialize.1",
>               "inputs": [
>                 "interpret.1"
>               ],
>               "action": {
>                 "operation": "materialize",
>                 "subject": "source rows",
>                 "reason": "serving",
>                 "release": "replacement"
>               }
>             },
>             {
>               "id": "publish.1",
>               "inputs": [
>                 "materialize.1"
>               ],
>               "action": {
>                 "operation": "publish",
>                 "subject": "source rows",
>                 "visibility": "with_acquisition"
>               }
>             }
>           ]
>         },
>         "initial": "pinned_snapshot",
>         "changes": "observations",
>         "deletions": "reconciliation",
>         "resume": "opaque_cursor",
>         "retentionMs": null,
>         "gap": "explicit_repair",
>         "limits": {
>           "deletion_sweep_hours": "24",
>           "exchange_evidence_bytes": "524288",
>           "publication_page_records": "128",
>           "record_fields": "32"
>         },
>         "restrictions": [
>           "Repeated point-in-time scans in shard document order; an index keeps no deletion tombstones, so no incremental read is claimed",
>           "Deletions are published when a key lookup answers absent; a sweep runs at most every deletion_sweep_hours"
>         ],
>         "commands": {}
>       }
>     }
>   },
>   "occurrences": null,
>   "artifacts": {
>     "raw_archive": false,
>     "native_file_transfer_limit_bytes": null,
>     "external_versions": false,
>     "files": {}
>   },
>   "commands": {}
> }
> ```

**Recorded checks**

| Requirement | Scope | Evidence | Result |
| - | - | - | - |
| page-publication-recovery | \{"kind":"collection","name":"records"} | The native store reader exists in platform source with unit tests of its wire decoding; no provider was reached through Bijection, and no case-scoped check receipt is attached. | Execution result unavailable |

Hosted qualification: **unestablished for this catalog configuration**. Installed connections report their own identity, authority and current status.

## Provider guidance

These recipes declare sources read by the native `store` transport: Azure Cosmos
DB, Apache Cassandra, Elasticsearch, OpenSearch, Apache HBase (REST server),
Neo4j (HTTP Query API), Redis keys, OPC UA servers and the AVEVA PI System
through PI Web API. A document store record is `{ key, document }`; a historian
sample is `{ key, stream, time, value, status }`; a discovery listing entry is
`{ key, name, document }`.

The declaration names only what changes what a publication proves: which change
history is followed, and `deletions: { everyHours }`, which looks every published
key up by key at that interval and withdraws the keys the store answers absent
for. A sweep is refused where the change history already carries deletions
(Cosmos DB all versions and deletes, Neo4j change data capture), for OPC UA, and
for PI points and values; a PI AF pass takes one. Endpoints, databases, containers, keyspaces, tables, indexes, labels, key
properties, key patterns, nodes and points are binding setup; credentials are
private connection configuration.

| Recipe | Initial read | Changes | Deletions |
| - | - | - | - |
| `cosmosdb.container.changeFeed` | latest-version feed from the beginning | latest per key | sweep only |
| `cosmosdb.container.allVersions` | query snapshot | all versions and deletes feed | in the feed, within continuous-backup retention |
| `cassandra.table.scan` | paged scan at LOCAL\_QUORUM | the next pass | sweep only |
| `elasticsearch.index.scan`, `opensearch.index.scan` | point-in-time scan | the next pass | sweep only |
| `hbase.table.scan` / `timeRange` | row scan | next pass / cell timestamp ranges | sweep only |
| `neo4j.nodes.cdc` / `watermark` | key-ordered snapshot | change data capture / watermark | CDC / sweep only |
| `redisKeys.keys.scan` | SCAN pass | next pass; notifications as hints | sweep, or a hinted key read absent |
| `opcua.nodes.browse`, `pi.points.list` | complete bounded listing | the next listing | omission from a complete listing |
| `pi.assets.list` | paged AF pass: database, elements, attributes | the next pass | sweep only (404 by WebId) |
| `opcua.values.history`, `pi.values.recorded` | archive from the installed start | values after the last one | none |
| `pi.values.channel` | archive from the installed start | archive backfill, then channel values within each window | none |
| `opcua.values.live` | none | subscription changes within each window | none |

PI values read installed `points` (names on `dataServer`) and `attributes` (full
AF attribute paths). A `pi.values.channel` connection is never continuous with
the previous one: each first reads recorded values from the retained position,
then follows the channel until its window ends or the channel closes, fails or
stays silent past its heartbeat bound. PI recorded and channel sources may
declare `writes: { commands: { <name>: "create" } }` (no marker): a create adds
`{ value }` at its key's time (`<WebId>|<time>|0`) with `updateOption=NoReplace`
and `bufferOption=DoNotBuffer`, and a lost answer is settled by reading the
value back.

OPC UA uses security policy None, so it reaches only loopback endpoints or a
co-located gateway; signed and encrypted policies are not built. These
registrations establish no provider check or hosted qualification; see the
platform's provider pages for what each reader proves and its limits.

## Provider references

Provider references and prerequisites are maintained in the connector guidance above. No separate provider-documentation review date is recorded.

## Source and evidence

[Canonical connector source](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/src/connectors/stores/README.md), [native analysis](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/contract-analysis.json) and [check receipts](https://github.com/bijectionhq/component-support/blob/b632604330ce9cbcfe17a5a680ef4fbe80f6f672/packages/connectors/evidence.json).

Connector artifact: `905888ea276a2a28e36981a79e8142b2547ea451c3e63162cb6915ad4a7d1305`.

The resource declaration examples above are compiled and compared with exact catalog declarations. Recorded checks apply only to their source, declaration and runtime identities. Configure a connection and inspect its status to establish deployment-specific readiness.


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