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
Dense vector search
Text-based semantic search
Uses Weaviate’s vectorizer to embed the query:Hybrid search (vector + BM25)
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
Choose the right alpha for hybrid search
Choose the right alpha for hybrid search
Tune the alpha parameter based on your use case:
Multi-tenancy at scale
Multi-tenancy at scale
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)
Leverage BM25 without sparse encoders
Leverage BM25 without sparse encoders
Weaviate’s BM25 is built-in, unlike other databases:
Generative search configuration
Generative search configuration
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:74create_collection(): src/vectordb/databases/weaviate.py:159upsert(): src/vectordb/databases/weaviate.py:207query(): src/vectordb/databases/weaviate.py:362hybrid_search(): src/vectordb/databases/weaviate.py:537generate(): src/vectordb/databases/weaviate.py:578create_tenants(): src/vectordb/databases/weaviate.py:629