Files
ruflo/docs/ruvector-postgres/examples/basic-queries.sql
T
rUvandClaude Opus 4.5 95efea2721 Checkpoint: File edits
Automatic checkpoint created by Claude Code
- Branch: main
- Timestamp: 2026-01-17T20:31:09Z
- Changes: 6 file(s)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 20:31:09 +00:00

212 lines
5.9 KiB
SQL

-- RuVector PostgreSQL Basic Queries
-- Optimized for Claude-Flow V3
--
-- These queries demonstrate fundamental vector operations
-- with HNSW indexing for 150x-12,500x faster search
-- ============================================
-- 1. INSERT EMBEDDINGS WITH METADATA
-- ============================================
-- Insert a single embedding (384-dimensional for MiniLM)
INSERT INTO claude_flow.embeddings (content, embedding, metadata)
VALUES (
'Implementing secure authentication with JWT tokens',
array_fill(0.1, ARRAY[384])::vector, -- Replace with actual embedding
'{"category": "security", "language": "typescript", "agent": "coder-1"}'::jsonb
);
-- Batch insert for better performance (recommended for >100 embeddings)
INSERT INTO claude_flow.embeddings (content, embedding, metadata)
SELECT
'Sample content ' || i,
(SELECT array_agg(random())::vector(384) FROM generate_series(1, 384)),
jsonb_build_object(
'batch_id', 'batch-001',
'index', i,
'created_by', 'v3-memory-specialist'
)
FROM generate_series(1, 100) AS i;
-- ============================================
-- 2. BASIC SIMILARITY SEARCH (Cosine Distance)
-- ============================================
-- Find top 10 similar embeddings using cosine distance
-- The <=> operator uses HNSW index for sub-millisecond search
SELECT
id,
content,
1 - (embedding <=> $1::vector) AS similarity,
metadata
FROM claude_flow.embeddings
WHERE embedding IS NOT NULL
ORDER BY embedding <=> $1::vector
LIMIT 10;
-- With similarity threshold (only return matches > 0.7 similarity)
SELECT
id,
content,
1 - (embedding <=> $1::vector) AS similarity,
metadata
FROM claude_flow.embeddings
WHERE embedding IS NOT NULL
AND 1 - (embedding <=> $1::vector) > 0.7
ORDER BY embedding <=> $1::vector
LIMIT 10;
-- ============================================
-- 3. PATTERN STORAGE AND RETRIEVAL
-- ============================================
-- Store a learned pattern from SONA
INSERT INTO claude_flow.patterns (name, description, embedding, pattern_type, confidence, metadata)
VALUES (
'authentication-flow',
'JWT-based authentication pattern with refresh tokens',
array_fill(0.1, ARRAY[384])::vector,
'code-pattern',
0.92,
'{
"learned_from": ["session-001", "session-002"],
"agent_type": "security-architect",
"success_rate": 0.95,
"contexts": ["api", "web", "mobile"]
}'::jsonb
);
-- Search patterns by type and minimum confidence
SELECT
id,
name,
description,
confidence,
pattern_type,
1 - (embedding <=> $1::vector) AS similarity
FROM claude_flow.patterns
WHERE pattern_type = 'code-pattern'
AND confidence >= 0.8
AND embedding IS NOT NULL
ORDER BY embedding <=> $1::vector
LIMIT 5;
-- ============================================
-- 4. AGENT MEMORY OPERATIONS
-- ============================================
-- Register an agent with initial memory state
INSERT INTO claude_flow.agents (agent_id, agent_type, state, memory_embedding)
VALUES (
'coder-v3-001',
'coder',
'{
"current_task": null,
"completed_tasks": 0,
"specializations": ["typescript", "react", "node"],
"performance_score": 0.0
}'::jsonb,
array_fill(0.0, ARRAY[384])::vector
)
ON CONFLICT (agent_id) DO UPDATE SET
state = EXCLUDED.state,
last_active = NOW();
-- Update agent memory embedding after task completion
UPDATE claude_flow.agents
SET
memory_embedding = $1::vector,
state = state || '{"completed_tasks": 1}'::jsonb,
last_active = NOW()
WHERE agent_id = 'coder-v3-001';
-- Find agents with similar memory (for knowledge transfer)
SELECT
agent_id,
agent_type,
state,
1 - (memory_embedding <=> $1::vector) AS memory_similarity,
last_active
FROM claude_flow.agents
WHERE memory_embedding IS NOT NULL
AND agent_id != 'coder-v3-001'
ORDER BY memory_embedding <=> $1::vector
LIMIT 3;
-- ============================================
-- 5. METADATA FILTERING WITH VECTOR SEARCH
-- ============================================
-- Combined metadata and vector search (V3 optimized)
SELECT
id,
content,
1 - (embedding <=> $1::vector) AS similarity,
metadata
FROM claude_flow.embeddings
WHERE embedding IS NOT NULL
AND metadata->>'category' = 'security'
AND (metadata->>'language')::text = ANY(ARRAY['typescript', 'javascript'])
ORDER BY embedding <=> $1::vector
LIMIT 10;
-- JSONB path query with vector search
SELECT
id,
content,
1 - (embedding <=> $1::vector) AS similarity,
metadata
FROM claude_flow.embeddings
WHERE embedding IS NOT NULL
AND metadata @> '{"agent": "coder-1"}'::jsonb
ORDER BY embedding <=> $1::vector
LIMIT 10;
-- ============================================
-- 6. AGGREGATIONS AND ANALYTICS
-- ============================================
-- Count embeddings by category
SELECT
metadata->>'category' AS category,
COUNT(*) AS count,
AVG(1 - (embedding <=> (
SELECT AVG(embedding) FROM claude_flow.embeddings
))) AS avg_centroid_similarity
FROM claude_flow.embeddings
WHERE metadata->>'category' IS NOT NULL
GROUP BY metadata->>'category'
ORDER BY count DESC;
-- Agent performance summary
SELECT
agent_type,
COUNT(*) AS agent_count,
AVG((state->>'completed_tasks')::int) AS avg_completed_tasks,
MAX(last_active) AS most_recent_activity
FROM claude_flow.agents
GROUP BY agent_type
ORDER BY agent_count DESC;
-- ============================================
-- 7. CLEANUP AND MAINTENANCE
-- ============================================
-- Delete old embeddings (keep last 30 days)
DELETE FROM claude_flow.embeddings
WHERE created_at < NOW() - INTERVAL '30 days';
-- Vacuum and analyze for optimal HNSW performance
VACUUM ANALYZE claude_flow.embeddings;
VACUUM ANALYZE claude_flow.patterns;
VACUUM ANALYZE claude_flow.agents;
-- Reindex HNSW for optimal search performance
REINDEX INDEX CONCURRENTLY claude_flow.idx_embeddings_hnsw;