Elasticsearch - Mem0

Elasticsearch

Elasticsearch is a distributed, RESTful search and analytics engine that can efficiently store and search vector data using dense vectors and k-NN search.

Installation

Elasticsearch support requires the Elasticsearch client as an extra dependency.

Python

pip install elasticsearch>=8.0.0

TypeScript

npm install mem0ai @elastic/elasticsearch

Usage

Python

import os
from mem0 import Memory

os.environ["OPENAI_API_KEY"] = "sk-xx"

config = {
    "vector_store": {
        "provider": "elasticsearch",
        "config": {
            "collection_name": "mem0",
            "host": "localhost",
            "port": 9200,
            "embedding_model_dims": 1536
        }
    }
}

m = Memory.from_config(config)
m.add(messages, user_id="alice", metadata={"category": "movies"})

TypeScript

import { Memory } from "mem0ai/oss";

const config = {
  embedder: {
    provider: "openai",
    config: {
      apiKey: process.env.OPENAI_API_KEY,
      model: "text-embedding-3-small",
    },
  },
  vectorStore: {
    provider: "elasticsearch",
    config: {
      collectionName: "mem0",
      embeddingModelDims: 1536,
      host: "localhost",
      port: 9200,
    },
  },
};

const memory = new Memory(config);
await memory.add(messages, { userId: "alice", metadata: { category: "movies" } });

The TypeScript SDK uses camelCase config keys: collectionName, embeddingModelDims, cloudId, apiKey, useSsl, verifyCerts, caCerts, autoCreateIndex, and username. collectionName and embeddingModelDims are required.

Config

Here are the parameters available for configuring Elasticsearch:

Parameter Description Default Value
collection_name The name of the index to store the vectors mem0
embedding_model_dims Dimensions of the embedding model 1536
host The host where the Elasticsearch server is running localhost
port The port where the Elasticsearch server is running 9200
cloud_id Cloud ID for Elastic Cloud deployment None
api_key API key for authentication None
user Username for basic authentication None
password Password for basic authentication None
use_ssl Whether to use SSL for the connection True
ca_certs Path to CA bundle for SSL certificate verification None
verify_certs Whether to verify SSL certificates True
auto_create_index Whether to automatically create the index True
custom_search_query Function returning a custom search query None
headers Custom headers to include in requests None

Features

Custom Search Query

custom_search_query is available in the Python SDK only. The TypeScript SDK runs a fixed k-NN query with optional metadata filters.

The custom_search_query parameter allows you to customize the search query when Memory.search is called.

Example

import os
from typing import List, Optional, Dict
from mem0 import Memory

# Define custom_search_query

def custom_search_query(query: List[float], limit: int, filters: Optional[Dict]) -> Dict:
    return {
        "knn": {
            "field": "vector",
            "query_vector": query,
            "k": limit,
            "num_candidates": limit * 2
        }
    }

os.environ["OPENAI_API_KEY"] = "sk-xx"

config = {
    "vector_store": {
        "provider": "elasticsearch",
        "config": {
            "collection_name": "mem0",
            "host": "localhost",
            "port": 9200,
            "embedding_model_dims": 1536,
            "custom_search_query": custom_search_query
        }
    }
}

The function should return a query body for the Elasticsearch search API.