Skip to main content
Weaviate is an open-source vector database with native support for BM25 hybrid search, generative AI integration, and enterprise-grade multi-tenancy. It combines semantic search with traditional keyword matching without requiring external sparse encoders.

Key features

  • Native BM25: Built-in keyword search without sparse embeddings
  • Generative search: RAG with OpenAI, Cohere, or custom LLMs
  • Multi-tenancy: Per-tenant shards for data isolation
  • Hybrid search: Vector + BM25 with configurable alpha balancing
  • GraphQL interface: Advanced querying capabilities
  • Cloud + self-hosted: Flexible deployment options

Installation

Install the Weaviate Python client:

Connection

Weaviate Cloud

Self-hosted instance

Collection creation

Basic collection

With vectorizer

Use Weaviate’s built-in vectorization:

With multi-tenancy

Upserting documents

Standard upsert

Tenant-scoped upsert

Weaviate auto-generates UUIDs if not provided. Use "id" or "uuid" keys to specify custom IDs.

Querying

Uses Weaviate’s vectorizer to embed the query:

Hybrid search (vector + BM25)

The alpha parameter controls the balance:
  • 1.0: Pure vector search (semantic)
  • 0.5: Balanced hybrid (default)
  • 0.0: Pure BM25 (keyword)

Metadata filtering

Weaviate uses MongoDB-style filter syntax:

Supported filter operators

  • $eq: Equal to
  • $ne: Not equal to
  • $gt: Greater than
  • $gte: Greater than or equal
  • $lt: Less than
  • $lte: Less than or equal
  • $in: Value in list
  • $like: Wildcard pattern matching
  • $and: Logical AND (implicit for multiple conditions)
  • $or: Logical OR

Reranking

Improve result precision with cross-encoder reranking:

Generative search (RAG)

Single prompt per result

Generate content for each retrieved document:

Grouped task

Generate content from all results combined:

Multi-tenancy

Create and manage tenants

Tenant-scoped operations

Converting results

Manual conversion

Convert raw Weaviate responses to Haystack Documents:

Best practices

Tune the alpha parameter based on your use case:
Weaviate’s native multi-tenancy uses per-tenant shards for true isolation:
  • Good: 100s to 1000s of tenants per collection
  • Good: Enterprise SaaS with strict data isolation requirements
  • Avoid: Millions of micro-tenants (consider Milvus partition keys)
Weaviate’s BM25 is built-in, unlike other databases:
Configure generative models per collection:
Requires API key in headers:

Error handling

Closing connections

Source reference

Implementation: src/vectordb/databases/weaviate.py Key classes and methods:
  • WeaviateVectorDB.__init__(): src/vectordb/databases/weaviate.py:74
  • create_collection(): src/vectordb/databases/weaviate.py:159
  • upsert(): src/vectordb/databases/weaviate.py:207
  • query(): src/vectordb/databases/weaviate.py:362
  • hybrid_search(): src/vectordb/databases/weaviate.py:537
  • generate(): src/vectordb/databases/weaviate.py:578
  • create_tenants(): src/vectordb/databases/weaviate.py:629