45 lines
1.6 KiB
SQL
45 lines
1.6 KiB
SQL
CREATE TABLE IF NOT EXISTS traduccion_embeddings (
|
|
id SERIAL PRIMARY KEY,
|
|
traduccion_id INT NOT NULL REFERENCES traducciones(id) ON DELETE CASCADE,
|
|
model TEXT NOT NULL,
|
|
dim INT NOT NULL,
|
|
embedding DOUBLE PRECISION[] NOT NULL,
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
UNIQUE (traduccion_id, model)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_tr_emb_traduccion_id ON traduccion_embeddings(traduccion_id);
|
|
CREATE INDEX IF NOT EXISTS idx_tr_emb_model ON traduccion_embeddings(model);
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF EXISTS (
|
|
SELECT 1 FROM information_schema.tables
|
|
WHERE table_schema = 'public' AND table_name = 'embeddings'
|
|
) THEN
|
|
EXECUTE 'ALTER TABLE embeddings RENAME TO embeddings_legacy';
|
|
END IF;
|
|
EXCEPTION WHEN others THEN
|
|
NULL;
|
|
END$$;
|
|
|
|
CREATE OR REPLACE VIEW embeddings AS
|
|
SELECT
|
|
te.traduccion_id,
|
|
te.dim,
|
|
te.embedding AS vec
|
|
FROM traduccion_embeddings te
|
|
WHERE te.model = 'sentence-transformers/paraphrase-multilingual-mpnet-base-v2';
|
|
|
|
CREATE TABLE IF NOT EXISTS related_noticias (
|
|
traduccion_id INT NOT NULL REFERENCES traducciones(id) ON DELETE CASCADE,
|
|
related_traduccion_id INT NOT NULL REFERENCES traducciones(id) ON DELETE CASCADE,
|
|
score DOUBLE PRECISION NOT NULL,
|
|
created_at TIMESTAMP DEFAULT NOW(),
|
|
PRIMARY KEY (traduccion_id, related_traduccion_id),
|
|
CHECK (traduccion_id <> related_traduccion_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_related_by_tr ON related_noticias (traduccion_id);
|
|
CREATE INDEX IF NOT EXISTS idx_related_by_relatedtr ON related_noticias (related_traduccion_id);
|
|
|