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

# OpenSearch

> OpenSearch is a distributed, free and open search and analytics engine for all types of data, including textual, numerical, geospatial, structured, and unstructured.

## Supported syncing

| Sync Type | Description | Supported Sync Modes |
| - | - | - |
| **Index documents** | Sync data from any source to an OpenSearch index or index alias | Upsert, Update |

## Connect to OpenSearch

Go to the [**Destinations** overview page](https://app.hightouch.com/destinations?from=docs) and click the **Add destination** button. Select **OpenSearch** and click **Continue**. You can then authenticate Hightouch to OpenSearch by entering your:

* **Host**: The hostname or IP address of your OpenSearch server. Don't include `https://` as part of the hostname.
* **Port**: The port number of your OpenSearch server's HTTP API. The default is 3306, but yours may be different.
* **Username**: This can be your personal OpenSearch login or a dedicated user for Hightouch.
* **Password**: The password for the user specified above.

Once you've entered these fields, click **Continue**. Give your destination a descriptive name and **Finish** the destination connection setup.

## Sync configuration

Once you've set up your OpenSearch destination and have a [model](https://docs.hightouch.com/getting-started/concepts.md#models) to pull data from, you can set up your sync configuration to begin syncing data. Go to the [**Syncs** overview page](https://app.hightouch.com/syncs?from=docs) and click the **Add sync** button to begin. Then, select the relevant model and the OpenSearch destination you want to sync to.

### Syncing to an index

An OpenSearch [index](https://opensearch.org/docs/latest/im-plugin/index/) is the place where the data used by a search engine is stored.
You can use Hightouch to update individual [documents](https://opensearch.org/docs/latest/api-reference/document-apis/index-document/) in an index.

You can also sync your document data via [index aliases](https://opensearch.org/docs/latest/im-plugin/index-alias/).
Index aliases will only be displayed if the [`is_write_index` option](https://opensearch.org/docs/latest/im-plugin/index-alias/#index-alias-options) is configured.

#### Record matching

To match rows from your model to documents in OpenSearch, you need to select a model column and corresponding OpenSearch field. You can match on any OpenSearch field.

#### Field mapping

You can sync data to both existing fields and fields that don't yet exist in OpenSearch. If you send data to a field that doesn't exist yet, Hightouch adds the field and automatically detects its type.

#### Delete behavior

The [delete behavior](https://docs.hightouch.com/syncs/overview.md#delete-behavior) you select dictates what to do when a row no longer appears in your model's query results. You have the following options:

| Behavior | Description |
| - | - |
| **Do nothing** | Keep the document in OpenSearch |
| **Clear** | Keep the document in OpenSearch, but set mapped fields to empty |
| **Delete** | Remove the document from OpenSearch |

#### Advanced configuration

You can configure how many rows you'd like to send per batch and how many batches you'd like to send in parallel.

> [!TIP]
>
> If your sync is rejecting all or most rows in your model with vague error messages, try decreasing the batch size.

## Tips and troubleshooting

To see the exact API requests and responses from each sync run, use the [live debugger](https://docs.hightouch.com/syncs/debugger.md). To get notified by Slack, PagerDuty, SMS, or email when a sync fails, set up [sync alerts](https://docs.hightouch.com/syncs/alerting.md). If you run into an issue this page doesn't cover, [contact support](#pylon-chat).

## Common errors

### Failed to connect to your OpenSearch client. Check your credentials.

This error can occur if your credentials are incorrect.
Ensure your hostname doesn't include `https://` and that your port is correct.
