{"skill":{"slug":"qdrant","displayName":"Qdrant","summary":"Build vector search with Qdrant using collections, payloads, filtering, and optimized indexing for semantic similarity.","description":"---\nname: Qdrant\nslug: qdrant\nversion: 1.0.0\ndescription: Build vector search with Qdrant using collections, payloads, filtering, and optimized indexing for semantic similarity.\nmetadata: {\"clawdbot\":{\"emoji\":\"🔍\",\"requires\":{\"bins\":[]},\"os\":[\"linux\",\"darwin\",\"win32\"]}}\n---\n\n## When to Use\n\nUser needs vector similarity search, semantic search, or recommendation systems. Agent handles collection design, point insertion, filtered queries, and index optimization.\n\n## Quick Reference\n\n| Topic | File |\n|-------|------|\n| Query patterns | `queries.md` |\n| Performance tuning | `performance.md` |\n\n## Core Rules\n\n### 1. Collection Setup\n- Set vector dimension to match embedding model (e.g., OpenAI ada-002 = 1536)\n- Choose distance metric deliberately: `Cosine` for normalized embeddings, `Dot` for raw scores, `Euclid` for absolute distance\n- Wrong dimension = silent failures with zero results\n\n### 2. Payload Strategy\n- Store filterable metadata as payload fields\n- Index payload fields used in filters: `create_payload_index`\n- Don't store large blobs in payloads — use external storage + reference ID\n\n### 3. Batch Operations\n- Insert points in batches of 100-1000, not one by one\n- Use `upsert` to handle duplicates by ID\n- Parallel uploads with `wait=false` then verify with collection info\n\n### 4. Filtering vs Post-Filtering\n| When | Use |\n|------|-----|\n| Known constraints | Filter in query (pre-filter) |\n| Score threshold | `score_threshold` parameter |\n| Complex logic | Combine `must`, `should`, `must_not` |\n\n- Pre-filtering reduces search space = faster\n- Post-filtering on results = slower, may miss relevant items\n\n### 5. Search vs Scroll\n| Need | Use |\n|------|-----|\n| Top-K similar | `search` |\n| All matching | `scroll` with filter |\n| Paginated results | `scroll` with `offset` |\n| Export/backup | `scroll` all with pagination |\n\n### 6. Index Optimization\n- HNSW parameters: increase `m` for recall, increase `ef_construct` for index quality\n- Default `m=16, ef_construct=100` works for most cases\n- For millions of vectors: enable `on_disk` storage\n- Use quantization (`scalar` or `product`) to reduce memory 4-8x\n\n### 7. Multi-Tenancy\n- Payload field for tenant ID + filter on every query\n- Or separate collections per tenant (simpler isolation, harder to manage)\n- Never expose one tenant's data to another\n\n## Common Traps\n\n- Creating collection with wrong vector size → all searches return empty\n- Forgetting `wait=true` on insert → querying before data indexed\n- Using scroll without limit → memory exhaustion on large collections\n- Not indexing payload fields → filter queries scan entire collection\n- Storing embeddings in payload instead of vector field → defeats purpose\n","tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":289,"installsAllTime":6,"installsCurrent":6,"stars":0,"versions":1},"createdAt":1771668218728,"updatedAt":1778491597572},"latestVersion":{"version":"1.0.0","createdAt":1771668218728,"changelog":"Initial release","license":null},"metadata":{"setup":[],"os":["linux","darwin","win32"],"systems":null},"owner":{"handle":"ivangdavila","userId":"s178jdk12x4qj3gs2se3etxf3h83h7ft","displayName":"Iván","image":"https://avatars.githubusercontent.com/u/81719670?v=4"},"moderation":null}