Back to glossary

Term

Weaviate

Weaviate is an open-source vector database written in Go — it stores objects together with their embeddings, combines semantic and keyword (BM25) search and offers built-in vectorization, RAG and multi-tenancy.

Weaviate — explained in detail

Weaviate is an open-source vector database written in Go that stores both objects and their embeddings. Data is organised into collections, which are configured much like a schema with properties and indexes. As its vector index Weaviate uses HNSW by default, which stays fast even across millions of entries.

A core trait is its modular architecture: vectorizer modules can turn text into embeddings automatically at import time — for example via OpenAI, Cohere, Hugging Face or Google. These models usually run as separate microservices. Weaviate supports hybrid search, combining semantic vector search with classic keyword search (BM25) in a single query, as well as built-in generative search (RAG) and reranking. The database is addressed through GraphQL and a REST API.

For production use Weaviate ships with multi-tenancy (isolated tenant data within one cluster), replication and role-based access control (RBAC). It runs self-hosted, as the managed Weaviate Cloud, or as a Kubernetes package inside your own VPC.

Example / Practical use

A typical RAG pipeline: documents are imported into a collection, and a configured vectorizer generates the embeddings directly — no separate embedding step in your own code is needed. A hybrid query then combines vector similarity and BM25 score, so exact term matches (such as product names or error codes) are not lost while semantically similar passages are still found. Multi-tenancy keeps data from different customers cleanly separated within the same cluster.

Qdrant is written in Rust and leans more heavily on payload filtering inside the index; Weaviate, by contrast, stands out with schema modelling, built-in vectorizer modules and hybrid search out of the box. Pinecone is cloud-only and ingests ready-made embeddings without vectorizing itself. pgvector is the right choice when vectors should live next to relational data in an existing Postgres database. For a general overview of the category, see the entry on the vector database.

Entdecke mehr