| |
| CREATE EXTENSION IF NOT EXISTS vector; |
|
|
| |
| CREATE TABLE IF NOT EXISTS documents ( |
| doc_id UUID PRIMARY KEY, |
| doc_name TEXT NOT NULL, |
| jurisdiction TEXT NOT NULL, |
| doc_type TEXT NOT NULL, |
| source_url TEXT NOT NULL, |
| effective_date DATE, |
| gazette_number TEXT, |
| total_chunks INTEGER DEFAULT 0, |
| ingested_at TIMESTAMPTZ DEFAULT NOW(), |
| is_active BOOLEAN DEFAULT TRUE |
| ); |
|
|
| |
| CREATE TABLE IF NOT EXISTS legal_chunks ( |
| chunk_id UUID PRIMARY KEY, |
| doc_id UUID REFERENCES documents(doc_id) ON DELETE CASCADE, |
| jurisdiction TEXT NOT NULL, |
| doc_type TEXT NOT NULL, |
| doc_name TEXT NOT NULL, |
| section_id TEXT NOT NULL, |
| section_title TEXT NOT NULL, |
| section_hierarchy TEXT[] NOT NULL DEFAULT '{}', |
| text TEXT NOT NULL, |
| effective_date DATE, |
| superseded_by UUID REFERENCES legal_chunks(chunk_id), |
| status TEXT NOT NULL DEFAULT 'active', |
| source_url TEXT NOT NULL, |
| page_number INTEGER NOT NULL, |
| embedding vector(768), |
| created_at TIMESTAMPTZ DEFAULT NOW() |
| ); |
|
|
| |
| |
| CREATE INDEX IF NOT EXISTS legal_chunks_embedding_idx |
| ON legal_chunks |
| USING hnsw (embedding vector_cosine_ops) |
| WITH (m = 16, ef_construction = 64); |
|
|
| |
| CREATE INDEX IF NOT EXISTS legal_chunks_jurisdiction_idx |
| ON legal_chunks (jurisdiction); |
|
|
| CREATE INDEX IF NOT EXISTS legal_chunks_doc_type_idx |
| ON legal_chunks (doc_type); |
|
|
| CREATE INDEX IF NOT EXISTS legal_chunks_section_id_idx |
| ON legal_chunks (section_id); |
|
|
| CREATE INDEX IF NOT EXISTS legal_chunks_status_idx |
| ON legal_chunks (status); |
|
|