--- title: "OpenSearch" description: "Use OpenSearch as a vector database in Mem0 with k-NN search support via AWS OpenSearch Service serverless collections." --- [OpenSearch](https://opensearch.org/) is an enterprise-grade search and observability suite that brings order to unstructured data at scale. OpenSearch supports k-NN (k-Nearest Neighbors) and allows you to store and retrieve high-dimensional vector embeddings efficiently. ### Installation OpenSearch support requires additional dependencies. Install them with: ```bash pip install opensearch-py ``` ### Prerequisites Before using OpenSearch with Mem0, you need to set up a collection in AWS OpenSearch Service. #### AWS OpenSearch Service You can create a collection through the AWS Console: - Navigate to [OpenSearch Service Console](https://console.aws.amazon.com/aos/home) - Click "Create collection" - Select "Serverless collection" and then enable "Vector search" capabilities - Once created, note the endpoint URL (host) for your configuration ### Usage ```python import os from mem0 import Memory import boto3 from opensearchpy import OpenSearch, RequestsHttpConnection, AWSV4SignerAuth # For AWS OpenSearch Service with IAM authentication region = 'us-west-2' service = 'aoss' credentials = boto3.Session().get_credentials() auth = AWSV4SignerAuth(credentials, region, service) config = { "vector_store": { "provider": "opensearch", "config": { "collection_name": "mem0", "host": "your-domain.us-west-2.aoss.amazonaws.com", "port": 443, "http_auth": auth, "embedding_model_dims": 1024, "connection_class": RequestsHttpConnection, "pool_maxsize": 20, "use_ssl": True, "verify_certs": True } } } ``` ### Configuration Options | Parameter | Type | Default | Description | |-----------|------|---------|-------------| | `collection_name` | string | required | Name of the OpenSearch index | | `host` | string | required | OpenSearch endpoint URL | | `port` | int | 9200 | Port number | | `http_auth` | object | None | Authentication credentials (e.g., AWSV4SignerAuth) | | `embedding_model_dims` | int | 1536 | Dimension of embedding vectors | | `use_ssl` | bool | False | Enable SSL/TLS connection | | `verify_certs` | bool | False | Verify SSL certificates | | `auto_refresh` | bool | False | Automatically refresh index after insert. OpenSearch refreshes every ~1 second by default, so this is rarely needed. | The defaults above match a local OpenSearch instance. The AWS OpenSearch Serverless example earlier on this page intentionally overrides them with `port=443`, `use_ssl=True`, and `verify_certs=True`, which are required when connecting to a Serverless collection. For **AWS OpenSearch Serverless**, keep `auto_refresh=False` (the default). The `indices.refresh()` API is not supported on Serverless collections. ### Add Memories ```python m = Memory.from_config(config) messages = [ {"role": "user", "content": "I'm planning to watch a movie tonight. Any recommendations?"}, {"role": "assistant", "content": "How about thriller movies? They can be quite engaging."}, {"role": "user", "content": "I'm not a big fan of thriller movies but I love sci-fi movies."}, {"role": "assistant", "content": "Got it! I'll avoid thriller recommendations and suggest sci-fi movies in the future."} ] m.add(messages, user_id="alice", metadata={"category": "movies"}) ``` ### Search Memories ```python results = m.search("What kind of movies does Alice like?", filters={"user_id": "alice"}) ``` ### Features - Fast and Efficient Vector Search - Can be deployed on-premises, in containers, or on cloud platforms like AWS OpenSearch Service - Multiple authentication and security methods (Basic Authentication, API Keys, LDAP, SAML, and OpenID Connect) - Automatic index creation with optimized mappings for vector search - Memory optimization through disk-based vector search and quantization - Real-time analytics and observability