====== Weaviate ======
**Weaviate** is an open-source vector database written in **Go** that stores both data objects and their vector embeddings, enabling semantic search, hybrid search, and structured filtering at scale. With over **16,000 stars** on GitHub,(([[https://github.com/weaviate/weaviate|GitHub Repository]])) it provides a cloud-native, real-time vector search engine using Hierarchical Navigable Small World (HNSW) graphs — achieving >95%% recall with millisecond latency.(([[https://weaviate.io/blog/vector-search-explained|Vector Search Explained]]))
Weaviate combines the power of vector similarity search with traditional structured data management, offering GraphQL and REST APIs, built-in AI model integration for automatic embedding generation, and horizontal scaling to billions of objects.(([[https://weaviate.io|Official Website]]))
===== How It Works =====
Weaviate stores data objects alongside their vector embeddings in an HNSW index — a hierarchical, multi-layered graph structure optimized for approximate nearest neighbor (ANN) search.(([[https://weaviate.io/blog/what-is-a-vector-database|What Is a Vector Database]])) When a query arrives, Weaviate can perform **semantic search** (vector similarity), **keyword search** (BM25), or **hybrid search** (combining both) with optional structured filters on object properties.
The database supports automatic vectorization through **modules** — pluggable vectorizers that generate embeddings during data ingestion using models like BERT, SBERT, OpenAI, or Cohere. This eliminates the need for a separate embedding pipeline.(([[https://www.datacamp.com/tutorial/weaviate-tutorial|DataCamp Weaviate Tutorial]]))
===== Key Features =====
* **Vector search** — HNSW-based ANN search with >95%% recall at millisecond latency
* **Hybrid search** — Combine semantic vector search with BM25 keyword search
* **Structured filtering** — Blend similarity search with property-based constraints
* **Auto-vectorization** — Built-in modules for OpenAI, Cohere, BERT, SBERT embeddings
* **GraphQL API** — Complex queries with nested references and aggregations
* **Real-time CRUD** — Full create, read, update, delete with live index updates
* **Horizontal scaling** — Distributed architecture for billions of objects
* **Multi-tenancy** — Isolated data per tenant with shared infrastructure
* **Module ecosystem** — Vectorizers, readers, generators, and rankers
===== Installation and Usage =====
# Install Weaviate client
# pip install weaviate-client
# Start Weaviate with Docker
# docker run -d -p 8080:8080 -p 50051:50051 \
# cr.weaviate.io/semitechnologies/weaviate:latest
import weaviate
import weaviate.classes as wvc
# Connect to Weaviate
client = weaviate.connect_to_local()
# Create a collection with auto-vectorization
collection = client.collections.create(
name="Article",
vectorizer_config=wvc.config.Configure.Vectorizer.text2vec_openai(),
properties=[
wvc.config.Property(name="title", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="content", data_type=wvc.config.DataType.TEXT),
wvc.config.Property(name="category", data_type=wvc.config.DataType.TEXT),
]
)
# Insert data (embeddings generated automatically)
articles = client.collections.get("Article")
articles.data.insert({"title": "Intro to ML", "content": "Machine learning...", "category": "AI"})
articles.data.insert({"title": "Go Concurrency", "content": "Goroutines...", "category": "Programming"})
# Semantic search (nearest neighbors by meaning)
results = articles.query.near_text(
query="artificial intelligence basics",
limit=5
)
# Hybrid search (vector + keyword)
results = articles.query.hybrid(
query="machine learning tutorial",
alpha=0.75, # 0=keyword only, 1=vector only
limit=5
)
# Filtered vector search
results = articles.query.near_text(
query="deep learning",
filters=wvc.query.Filter.by_property("category").equal("AI"),
limit=5
)
client.close()
===== Architecture =====
%%{init: {'theme': 'dark'}}%%
graph TB
App([Application]) -->|GraphQL / REST / gRPC| API[Weaviate API Layer]
API -->|Query| QE[Query Engine]
QE -->|Vector Search| HNSW[HNSW Index]
QE -->|Keyword Search| BM25[Inverted Index BM25]
QE -->|Hybrid| Fusion[Score Fusion]
QE -->|Filters| Filter[Property Filters]
HNSW -->|ANN Results| Fusion
BM25 -->|BM25 Results| Fusion
Filter -->|Filtered Set| Fusion
Fusion -->|Ranked Results| API
API -->|Ingest| Ingest[Data Ingestion]
Ingest -->|Auto-Vectorize| Modules{Vectorizer Modules}
Modules -->|OpenAI| OAI[text2vec-openai]
Modules -->|Cohere| Cohere[text2vec-cohere]
Modules -->|Local| SBERT[text2vec-transformers]
Ingest -->|Store| Storage[Object Store + HNSW]
subgraph Written in Go
API
QE
HNSW
BM25
Storage
end
===== Search Modes =====
^ Mode ^ Method ^ Description ^
| Semantic | ''near_text'' / ''near_vector'' | Find objects by meaning using vector similarity |
| Keyword | ''bm25'' | Traditional full-text search with BM25 ranking |
| Hybrid | ''hybrid'' | Combine vector and keyword with configurable alpha |
| Filtered | Any + ''filters'' | Add property constraints to any search mode |
===== Deployment Options =====
* **Docker** — Single-node for development and small workloads
* **Kubernetes** — Distributed deployment with horizontal scaling
* **Weaviate Cloud Services (WCS)** — Managed cloud with auto-scaling
* **Embedded** — In-process for testing and prototyping
===== See Also =====
* [[arize_phoenix|Arize Phoenix — AI Observability]]
* [[outlines|Outlines — Structured Output via Constrained Decoding]]
* [[chainlit|Chainlit — Conversational AI Framework]]
===== References =====