The Vector Database Landscape

This content was generated with the assistance of AI and should be verified against the official documentation of each tool and framework before being relied on in production.

This section’s bibliography lists the reference material consulted while preparing these pages.

Examples and version references on this page target LangChain / langchain-core / LangGraph 1.4 / 1.6 / 1.2, LangChain4j 1.20.1, and Spring Boot 4.1 with Spring AI 2.0.1, alongside the engine versions used throughout this section (pgvector 0.8.6, sqlite-vec 0.1.9, FAISS 1.15.1). "Vector database" has become a loose umbrella term for a wide range of very different tools, from a single-file embedded library to a fully managed cloud service. This page maps that landscape into five overlapping categories, compares their features side by side, and looks at why a query written against one of them rarely runs unchanged against another. It stops short of scoring the engines against each other or pricing them out — that evaluation lives on Comparing Vector Databases.

Five categories, one underlying problem

Every tool below solves the same core problem — given a query vector, find the nearest stored vectors quickly — but each one bolted that capability onto a different starting point, and that starting point still shapes what it is good at.

A map of the vector database landscape grouped into five categories: libraries, SQL extensions, purpose-built engines, search engines, and multi-model / NoSQL stores, with a deployment-model axis from embedded library to fully managed serverless

Libraries

A library has no server, no network protocol and no notion of metadata or persistence beyond what the calling process wires up itself. It is a set of in-process ANN algorithms an application links against directly.

  • FAISS — the reference implementation for ANN research, covered in depth on FAISS. It gives every index family and GPU acceleration, at the cost of every other database feature: no filtering, no concurrency control, no replication.

SQL extensions

A SQL extension adds a vector type and a handful of operators to an existing relational engine, so vector search becomes one more thing SQL can do next to joins, transactions and the rest of the schema.

  • pgvector — a PostgreSQL extension; see PostgreSQL & pgvector.

  • sqlite-vec — an SQLite extension for embedded, single-file use; see Vector Search in SQLite.

  • Oracle AI Vector Search — a VECTOR type built into the converged Oracle Database, with HNSW and IVF indexes queried through ordinary SQL joins. It is mentioned here for completeness rather than documented in depth on this site.

Purpose-built engines

A purpose-built engine is designed around the vector index as its primary access path, rather than adding one to something else. This is the category most people picture when they hear "vector database."

  • Qdrant — self-hostable, Rust-based; see Qdrant Reference.

  • Milvus — built for billion-scale distributed search, with a disaggregated storage/compute architecture and the widest index choice of any engine here (HNSW, IVF, DiskANN, GPU CAGRA).

  • Weaviate — ships built-in vectorizer and reranker modules so embedding can happen at ingest time, alongside BM25 + vector hybrid search.

  • Chroma — the simplest developer experience of the group, with an embedded/local mode as well as a hosted cloud.

  • LanceDB — embedded, storing vectors in the columnar Lance format directly on object storage.

  • Pinecone — the odd one out in this category: a fully managed serverless service with no self-hosted or local option at all. It is grouped here because its data model and query surface are purpose-built for vectors in the same way, even though "deployment model" for Pinecone is a single point, not a range.

Search engines

A search engine started as a lexical, inverted-index engine and added dense-vector kNN alongside it, so the same system that already scores BM25 relevance can also rank by vector similarity.

  • Elasticsearch — see Vector & semantic search.

  • OpenSearch — Elasticsearch’s Apache-2.0 fork with its own vector engine choices (faiss, lucene, nmslib); it has no dedicated page in this site’s reference yet, but shares the retriever concepts covered on the Elasticsearch page.

  • Apache Solr — see Dense vector search.

  • Apache Lucene — see kNN / HNSW vector search. Lucene is the odd one out here too: it is an embeddable Java library, not a server, and both Solr and Elasticsearch build their vector search on top of it.

Multi-model / NoSQL

A multi-model or NoSQL store added a vector index next to the data model it already had — documents, key-value pairs, or a property graph — so vectors live beside the operational data they describe instead of in a separate system.

These categories overlap deliberately rather than cleanly: Redis and MongoDB are both credible purpose-built targets for a pure vector workload; OpenSearch and Elasticsearch compete directly with Qdrant and Milvus on RAG pipelines; and pgvector’s whole appeal is that it lets a team stay inside a category (relational SQL) it was already in, rather than adopting a new one.

Feature comparison

The table below compares deployment model, index types, filtering, hybrid search, quantization, licence and framework support across every engine named above. It is a feature inventory, not a verdict — performance, pricing and cloud availability are compared on Comparing Vector Databases, which also carries the per-engine strengths and weaknesses. Framework support was checked against each framework’s own integration list: LangChain’s vector store integrations page, Spring AI’s vector store documentation, and LangChain4j’s embedding stores page.

Engine Category Deployment Index types Filter Hybrid Quantization LangChain Spring AI LangChain4j Site page

FAISS

Library

Embedded (in-process)

Flat, IVF, HNSW, PQ, composite

No (application-managed)

No

Scalar, product, binary

Yes

No

No

FAISS

pgvector

SQL extension

Self-hosted or managed PostgreSQL

HNSW, IVFFlat

Yes (SQL WHERE, iterative scans)

Yes (SQL + full-text tsvector)

halfvec, bit (binary)

Yes

Yes

Yes

PostgreSQL & pgvector

sqlite-vec

SQL extension

Embedded (single file)

Brute-force KNN

Yes (metadata and partition-key columns; auxiliary columns are not filterable)

Yes (via FTS5 join)

int8 and bit (binary) vector columns

Yes

No

No

Vector Search in SQLite

Oracle AI Vector Search

SQL extension

Self-hosted, OCI, or Oracle Database@AWS/Azure/Google Cloud

HNSW, IVF

Yes (SQL joins)

Yes (SQL)

Yes

Yes

Yes

Yes

 — 

Qdrant

Purpose-built engine

Self-hosted, Qdrant Cloud, or BYOC

HNSW (filterable)

Yes (payload-aware, in-graph)

Yes (sparse vectors + RRF)

Scalar, product, binary

Yes

Yes

Yes

Qdrant Reference

Milvus

Purpose-built engine

Self-hosted (standalone or distributed) or Zilliz Cloud

HNSW, IVF, DiskANN, GPU CAGRA

Yes

Yes (dense + sparse multi-vector)

Scalar, product, binary

Yes

Yes

Yes

 — 

Weaviate

Purpose-built engine

Self-hosted, Weaviate Cloud, or BYOC

HNSW, flat

Yes

Yes (BM25 + vector fusion)

Product, binary

Yes

Yes

Yes

 — 

Chroma

Purpose-built engine

Embedded/local or Chroma Cloud

HNSW

Yes

No (vector-first; metadata filters only)

No

Yes

Yes

Yes

 — 

LanceDB

Purpose-built engine

Embedded (Lance format on object storage) or Enterprise

IVF-PQ, HNSW

Yes

Yes (full-text + vector)

Product

Yes

No

No

 — 

Pinecone

Purpose-built engine (managed only)

Fully managed serverless

HNSW-family (proprietary)

Yes (namespaces + metadata filters)

Yes (dense + sparse)

No (storage/compute separation instead)

Yes

Yes

Yes

 — 

Elasticsearch

Search engine

Self-hosted, Elastic Cloud Hosted, or Serverless

HNSW (dense_vector)

Yes (filtered kNN)

Yes (retrievers: knn, rrf, reranker)

int8, int4, BBQ

Yes

Yes

Yes

Vector & semantic search

OpenSearch

Search engine

Self-hosted, Amazon OpenSearch Service/Serverless

HNSW (faiss, lucene, nmslib engines), IVF

Yes

Yes (hybrid query, neural search)

Scalar (via faiss/lucene engines)

Yes

Yes

Yes

 — 

Apache Solr

Search engine

Self-hosted (SolrCloud) or third-party managed

HNSW (Lucene-backed)

Yes (pre-filter and post-filter)

Yes (lexical + vector)

No

No

No

No

Dense vector search

Apache Lucene

Search engine (library)

Embedded (Java library)

HNSW, quantised codecs

Yes (pre-filtering)

Yes (application-composed)

Scalar, binary

No

No

No

kNN / HNSW vector search

Redis

Multi-model / NoSQL

Self-hosted, Redis Cloud, or cloud-native (ElastiCache, MemoryDB, Azure Managed Redis, Memorystore)

FLAT, HNSW, SVS-VAMANA

Yes (pre-filtered KNN)

Yes (FT.HYBRID)

Q8, BIN, LVQ/LeanVec

Yes

Yes

Yes

Vector Search: Query Engine & Vector Sets

MongoDB

Multi-model / NoSQL

Self-managed or Atlas

HNSW ($vectorSearch)

Yes (pre-filters in the aggregation pipeline)

Yes ($rankFusion)

Scalar, binary

Yes

Yes

Yes

Text, wildcard, geospatial & Atlas search

Couchbase

Multi-model / NoSQL

Self-managed or Capella

Hyperscale Vector Index (Vamana/DiskANN-inspired), Composite Vector Index, Search-service HNSW

Yes

Yes (Search service)

Scalar

Yes

Yes

Yes

Full-Text & Vector Search, Analytics & Eventing

Neo4j

Multi-model / NoSQL

Self-managed or AuraDB

HNSW (Lucene-backed)

Yes (Cypher predicates)

Yes (vector + full-text, application-composed)

No

Yes

Yes

Yes

Vector Search and GenAI

Cassandra

Multi-model / NoSQL

Self-managed or Astra DB

Storage-attached indexing (SAI) over HNSW

Yes (CQL predicates)

Yes (application-composed)

No

Yes (via Astra DB)

Yes

Yes

 — 

Licences follow the same pattern as everywhere else in this section: FAISS, sqlite-vec, Qdrant, Milvus, Chroma, LanceDB, OpenSearch, Solr, Lucene and Cassandra are permissively licensed (MIT or Apache 2.0); Weaviate is BSD-3-Clause; pgvector uses the PostgreSQL licence; Pinecone and Oracle AI Vector Search are proprietary; Elasticsearch, Redis and MongoDB use source-available or dual/triple licences (ELv2/SSPL/AGPLv3, AGPLv3/RSALv2/ SSPLv1, and SSPL respectively); and Neo4j’s Community edition is GPLv3 with a commercial Enterprise tier. The full per-engine breakdown, with dates and links, is on Comparing Vector Databases.

The portability problem

Every row in the table above speaks a different query language for what is conceptually the same operation: find the k vectors nearest a query vector, optionally filtered, optionally blended with a lexical score. A SIMILARITY SEARCH written for one engine has to be rewritten by hand for another — there is no SQL-92-style standard that a vector query compiles against the way relational SQL does.

This gap has been a recurring topic of community and industry discussion for several years, under names such as "Vector Query Language" or "VQL" — a proposed, illustrative idea for what a portable vector query surface could look like, not a ratified standard with a single official specification. No engine implements the sketch below as written; it exists to make the portability problem concrete, not to describe a product.

A conceptual VQL-style data model treats a collection as a named set of records, each with a vector plus arbitrary scalar attributes — deliberately close to what every purpose-built engine and SQL extension above already exposes, just without a shared syntax for expressing it. A similarity search reads, in illustrative pseudo-syntax:

SIMILARITY SEARCH TOP 10
FROM docsassistant_chunks
USING VECTOR {0.012, -0.087, 0.045, ...}
USING METRIC COSINE

Filtered and thresholded search compose the same clause with an ordinary predicate and a distance cutoff, mirroring what pgvector expresses in a WHERE clause and Qdrant expresses as a payload filter:

SIMILARITY SEARCH TOP 10
FROM docsassistant_chunks
USING VECTOR {...}
USING METRIC COSINE
WHERE component = 'vector-rag'
MINIMUM SIMILARITY 0.75

A HYBRID SEARCH clause would fold lexical and vector scoring into one statement with explicit weights. Today that fusion is spelled differently everywhere: some engines build it in, each with its own syntax (Qdrant’s RRF fusion query, Elasticsearch’s rrf retriever, Redis’s FT.HYBRID, MongoDB’s $rankFusion), while the rest — pgvector, sqlite-vec, Lucene and Neo4j among them — leave the two queries and their fusion to the application:

HYBRID SEARCH TOP 10
FROM docsassistant_chunks
MATCHING TEXT 'how does ef_search affect recall'  WEIGHT 0.3
USING VECTOR {...} WEIGHT 0.7

RANGE SEARCH would return every vector within a radius rather than a fixed count — the same shape as FAISS’s range_search, pgvector’s <→ used in a WHERE clause, and Redis’s VECTOR_RANGE:

RANGE SEARCH
FROM docsassistant_chunks
USING VECTOR {...}
USING METRIC COSINE
WITHIN 0.35

Batch search (many query vectors in one call, as FAISS’s search already does for a whole matrix at once) and vector-valued functions and aggregations round out the sketch: an AVG over a group of vectors would return their centroid, and a GEOMETRIC_MEDIAN aggregate would return the vector minimizing total distance to the group — a robustness improvement over the centroid when a group contains outliers — illustrative of the kind of vector-native aggregation a query language could offer, analogous to AVG/MEDIAN over scalar columns today.

What actually solves this today

In practice, two different layers absorb the portability problem instead of a query language doing it:

  • Framework abstractions. LangChain’s VectorStore interface and LangChain4j’s EmbeddingStore interface, and Spring AI’s VectorStore interface, give application code one add/similaritySearch/delete-shaped surface that each concrete implementation (pgvector, Qdrant, Redis, …​) maps onto its own native query language behind the scenes. Swapping the backing engine is a constructor or configuration change, not a rewrite of retrieval code — see In LangChain and Spring AI below.

  • SQL extensions. pgvector, sqlite-vec and Oracle AI Vector Search sidestep the problem differently: instead of inventing a new vector query language, they add a type and a few operators to SQL, which is itself already a portable, standardized language for everything except the vector-specific parts (<→/<⇒, MATCH …​ AND k = ?, and their Oracle equivalents still differ syntactically per engine).

Neither layer is a complete answer: a framework abstraction hides simple CRUD and search calls uniformly, but advanced features — filter-expression syntax, quantization settings, hybrid-fusion weights, index-tuning parameters — still leak the underlying engine’s own vocabulary through the abstraction, which is exactly the "switching cost" Comparing Vector Databases discusses.

In LangChain and Spring AI

LangChain

LangChain’s VectorStore base class gives every concrete store (FAISS, PGVector, QdrantVectorStore, RedisVectorStore, and the rest) the same construction, add_documents/similarity_search, and as_retriever() surface. Choosing an engine from this landscape becomes a choice of which VectorStore subclass to instantiate, not a change to the surrounding chain or agent code:

from langchain_core.vectorstores import VectorStore
from langchain_ollama import OllamaEmbeddings
from langchain_postgres import PGVector
from langchain_qdrant import QdrantVectorStore

embeddings = OllamaEmbeddings(model="nomic-embed-text")


def docsassistant_store(engine: str) -> VectorStore:
    # The only engine-specific code: which VectorStore subclass to build, and how to reach it.
    if engine == "pgvector":
        return PGVector(
            embeddings=embeddings,
            collection_name="docsassistant",
            connection="postgresql+psycopg://docs:docs@localhost:5432/docsassistant",
        )
    return QdrantVectorStore.from_existing_collection(
        embedding=embeddings, collection_name="docsassistant_chunks", url="http://localhost:6333"
    )


# Everything below is identical whichever engine backs the store.
retriever = docsassistant_store("pgvector").as_retriever(search_kwargs={"k": 5})
docs = retriever.invoke("what does ef_search control?")

See LangChain — vector store integrations for every supported engine, and Vector stores for the construction and retrieval patterns on this site. LangChain4j’s EmbeddingStore interface (LangChain4j) is the equivalent on the JVM.

Spring AI

Spring AI’s VectorStore interface plays the same role for Spring Boot applications: PgVectorStore, QdrantVectorStore, RedisVectorStore, ElasticsearchVectorStore and the other implementations listed in the feature table above all implement the same add/delete/similaritySearch(SearchRequest) contract, auto-configured from the starter on the classpath and its spring.ai.vectorstore.* properties:

@Service
public class DocsAssistantRetriever {

    // Whichever starter is on the classpath (pgvector, Qdrant, Redis, Elasticsearch, ...) supplies this bean.
    private final VectorStore vectorStore;

    public DocsAssistantRetriever(VectorStore vectorStore) {
        this.vectorStore = vectorStore;
    }

    public List<Document> retrieve(String question) {
        return this.vectorStore.similaritySearch(SearchRequest.builder()
                .query(question)
                .topK(5)
                .filterExpression("component == 'vector-rag'")
                .build());
    }
}

See Spring AI — Vector databases for the VectorStore API and the list of supported stores, and VectorStore API for the construction pattern and SearchRequest.builder() usage against the DocsAssistant schema.