-- 1. Tenant-aware table
CREATE TABLE tenant_embedding (
tenant_id UUID NOT NULL,
doc_id BIGINT,
embedding VECTOR(2), -- using tiny 2‑dim vectors for demo
metadata JSONB,
PRIMARY KEY (tenant_id, doc_id)
);
-- 2. Create some tenants
INSERT INTO tenants (id, name) VALUES
('11111111-1111-1111-1111-111111111111', 'Tenant A');
INSERT INTO tenants (id, name) VALUES
('22222222-2222-2222-2222-222222222222', 'Tenant B');
-- 3. Seed soome data
INSERT INTO tenant_embedding (tenant_id, doc_id, embedding, metadata) VALUES
('11111111-1111-1111-1111-111111111111', 1, '[0.05, 0.95]', '{"title":"DocA"}'),
('11111111-1111-1111-1111-111111111111', 2, '[0.04, 0.90]', '{"title":"DocB"}');
INSERT INTO tenant_embedding (tenant_id, doc_id, embedding, metadata) VALUES
('22222222-2222-2222-2222-222222222222', 1, '[0.80, 0.20]', '{"title":"DocC"}');
-- 3. Create an index (Nile will partition by tenant_id)
CREATE INDEX tenant_embedding_diskann_idx
ON tenant_embedding
USING diskann (embedding vector_cosine_ops);
-- 4. Tenant‑scoped ANN query
SET nile.tenant_id = '11111111-1111-1111-1111-111111111111';
SELECT doc_id, metadata
FROM tenant_embedding
ORDER BY embedding <=> '[0.06, 0.92]'
LIMIT 2;