Using LangChain Azure Cosmos DB NoSQL Vector Search Store

Posted: Feb 8, 2025.

Azure Cosmos DB NoSQL Vector Search allows you to store and search high-dimensional vectors alongside your data in Cosmos DB NoSQL containers. This guide shows you how to use LangChain's integration to leverage vector search capabilities for similarity search and retrieval.

What is AzureCosmosDBNoSqlVectorSearch?

AzureCosmosDBNoSqlVectorSearch is a LangChain vector store that uses Azure Cosmos DB's built-in vector search capabilities. It allows you to:

  • Store documents and their vector embeddings in Cosmos DB NoSQL containers
  • Perform semantic similarity searches using different distance functions (cosine, euclidean, etc.)
  • Index high-dimensional vectors for efficient search at scale
  • Co-locate vectors with other document data in the same logical unit

Reference

Key attributes and methods:

MethodDescription
__init__Initializes vector store with cosmos client, embedding function and configurations
add_textsAdd text strings and their embeddings to the store
add_documentsAdd LangChain documents to the store
similarity_searchFind similar documents based on query
similarity_search_with_scoreSearch with similarity scores
deleteRemove documents by IDs
as_retrieverConvert into a LangChain retriever

How to Use AzureCosmosDBNoSqlVectorSearch

Initial Setup

First, set up an Azure Cosmos DB NoSQL account and create the required embedding models:

from azure.cosmos import CosmosClient
from langchain_openai import AzureOpenAIEmbeddings
from langchain_community.vectorstores.azure_cosmos_db_no_sql import AzureCosmosDBNoSqlVectorSearch

# Azure Cosmos DB setup 
cosmos_client = CosmosClient(endpoint, key)
database_name = "vector_db"
container_name = "vector_container" 

# Azure OpenAI embeddings
embeddings = AzureOpenAIEmbeddings(
    deployment='embedding_model',
    azure_endpoint=azure_endpoint,
    api_key=api_key
)

Set up vector search policies:

indexing_policy = {
    "indexingMode": "consistent",
    "includedPaths": [{"path": "/*"}],
    "vectorIndexes": [{
        "path": "/embedding", 
        "type": "quantizedFlat"
    }],
}

vector_embedding_policy = {
    "vectorEmbeddings": [
        {
            "path": "/embedding",
            "dimensions": 1536,
            "distanceFunction": "cosine",  
        }
    ]
}

Initialize Vector Store

Create an instance of the vector store:

vector_store = AzureCosmosDBNoSqlVectorSearch.from_documents(
    documents=docs,
    embedding=embeddings,
    cosmos_client=cosmos_client,
    database_name=database_name, 
    container_name=container_name,
    vector_embedding_policy=vector_embedding_policy,
    indexing_policy=indexing_policy
)

Search Documents

Perform similarity search:

# Basic search
results = vector_store.similarity_search(
    query="What is machine learning?",
    k=4
)

# Search with scores
results = vector_store.similarity_search_with_score(
    query="What is machine learning?",
    k=4
)

# Pre-filter search 
results = vector_store.similarity_search(
    query="What is machine learning?",
    pre_filter={
        "category": "technical"
    }
)

Use as Retriever

Convert to LangChain retriever for use in chains:

retriever = vector_store.as_retriever(
    search_type="similarity",
    search_kwargs={
        "k": 4,
        "score_threshold": 0.8
    }
)

Best Practices

  • Configure optimal vector dimensions and distance metrics for your use case
  • Use pre-filtering to narrow searches when needed
  • Consider score thresholds to filter low-quality matches
  • Batch document additions using add_texts() for better performance
  • Use delete() to remove outdated or irrelevant documents
  • Monitor cosmosdb metrics to optimize performance

Azure Cosmos DB NoSQL Vector Search provides a powerful way to implement semantic search in your LangChain applications while leveraging Azure's enterprise-grade database capabilities.

An alternative to LangSmith

Open-source LangChain monitoring, prompt management, and magic. Get started in 2 minutes.

LangChain Docs

Join 10,000+ subscribers

Every 2 weeks, latest model releases and industry news.

An alternative to LangSmith

Open-source LangChain monitoring, prompt management, and magic. Get started in 2 minutes.

LangChain Docs