# Vector Store Shootout

> 8 vector store implementations behind a common interface — numpy, lancedb, qdrant, pgvector, weaviate, weaviate_hybrid, milvus, lightrag. Use when evaluating RAG backends, building vector search, or comparing embedding stores. Each backend is a drop-in replacement via the base class.

- Skill: `dvcrn/vector-store-shootout` (Agent Skill, multi-file: 9 files)
- Install (CLI): `npx skillmds@latest add dvcrn/vector-store-shootout`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dvcrn/vector-store-shootout/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: dvcrn (https://skillmd.com/u/dvcrn)
- Updated: 2026-09-08
- Page: https://skillmd.com/skills/dvcrn/vector-store-shootout

---


# Vector Store Shootout

Eight vector store backends with a common `VectorStore` interface. Swap backends by changing one line — the rest of your code stays the same.

## Backends

| Backend | Type | Dependencies | Best For |
|---|---|---|---|
| **numpy** | In-memory | numpy only | Prototyping, small datasets |
| **lancedb** | File-based | lancedb | Local persistence, Arrow-native |
| **qdrant** | Client-server | qdrant-client | Production, filtering |
| **pgvector** | Postgres extension | psycopg2 | Existing Postgres deployments |
| **weaviate** | Client-server | weaviate-client | Hybrid search (BM25 + vector) |
| **weaviate_hybrid** | Client-server | weaviate-client | BM25-heavy hybrid (alpha=0.1) |
| **milvus** | Client-server | pymilvus | Large-scale, GPU-accelerated |
| **lightrag** | Graph-enhanced | lightrag | Graph + vector RAG |

## Common Interface

```python
from base import VectorStore

class MyStore(VectorStore):
    async def add(self, texts, embeddings, metadatas): ...
    async def search(self, query_embedding, k=5): ...
    async def delete(self, ids): ...
```

## Key Finding

Weaviate hybrid search at alpha=0.1 (BM25-heavy) scored avg 0.9940 vs 0.9700 at default 0.5. For technical content with specific terminology, keyword matching matters more than semantic similarity.

## Files

- `scripts/base.py` — Abstract base class
- `scripts/numpy_store.py` through `scripts/lightrag_store.py` — All 8 implementations

