Spaces:
Sleeping
Sleeping
File size: 3,720 Bytes
45b1179 0d02fb4 45b1179 5c793cc 45b1179 0d02fb4 45b1179 0d02fb4 45b1179 5c793cc 45b1179 0d02fb4 45b1179 0d02fb4 45b1179 5c793cc 45b1179 0d02fb4 45b1179 0d02fb4 45b1179 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | # PgVector Post Embeddings Schema
Este es el contrato actual para guardar publicaciones derivadas en RDS PostgreSQL + pgvector.
La API principal sigue siendo la fuente de verdad. Esta tabla contiene datos derivados para busqueda semantica y recomendacion de posts.
## Tabla
```sql
CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE IF NOT EXISTS post_embeddings (
external_id TEXT PRIMARY KEY,
document TEXT NOT NULL,
metadata JSONB NOT NULL DEFAULT '{}'::jsonb,
embedding VECTOR(300) NOT NULL,
content_hash TEXT NOT NULL,
embedding_model TEXT NOT NULL,
embedding_version TEXT NOT NULL,
is_active BOOLEAN NOT NULL DEFAULT true,
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
CREATE TABLE IF NOT EXISTS post_embedding_tombstones (
post_id TEXT PRIMARY KEY,
source_version BIGINT,
deleted_at TIMESTAMPTZ NOT NULL DEFAULT now()
);
```
`VECTOR(300)` corresponde al modelo preentrenado
`facebook/fasttext-es-vectors` usado por `FastTextEmbeddingProvider`.
## Columnas
| Columna | Tipo | Descripcion |
|---|---|---|
| `external_id` | `TEXT` | ID del post en la API principal. |
| `document` | `TEXT` | Texto construido para generar el embedding. |
| `metadata` | `JSONB` | Datos estructurados utiles para filtros y respuesta. |
| `embedding` | `VECTOR(300)` | Promedio normalizado de embeddings FastText del `document`. |
| `content_hash` | `TEXT` | SHA-256 del contenido y la configuracion/version del embedding. |
| `embedding_model` | `TEXT` | Nombre del modelo usado para generar embeddings. |
| `embedding_version` | `TEXT` | Version logica del embedding. |
| `is_active` | `BOOLEAN` | Estado derivado desde la API principal. |
| `updated_at` | `TIMESTAMPTZ` | Fecha de ultima sincronizacion. |
`post_embedding_tombstones` evita resurrecciones cuando llega primero un delete/archive
de la API principal y despues llega tarde un upsert con `source_version` menor o igual.
## Metadata JSONB
El job guarda estos campos en `metadata` cuando existen:
```json
{
"title": "Titulo del post",
"city": "Tuxtla Gutierrez",
"state": "Chiapas",
"source": "internal",
"tags": "cafe,amigos",
"is_active": true
}
```
## Document
El campo `document` se construye concatenando, cuando existan:
```text
title city state source tags text/content/description/body
```
Ejemplo:
```text
Plan de cafe Tuxtla Gutierrez Chiapas internal cafe amigos Una publicacion para salir por cafe
```
## Content Hash
`content_hash` se calcula con SHA-256 sobre el hash del contenido mas:
```json
{
"source_content_hash": "...",
"embedding_model": "facebook/fasttext-es-vectors",
"embedding_version": "common-crawl-300-v1",
"embedding_dimension": 300
}
```
Si el hash no cambia, el job omite regenerar embedding.
## Funciones Requeridas
El feed a帽ade contratos controlados para sincronizaci贸n incremental, perfiles y
clustering. La migraci贸n que se copia a DataGrid es:
```text
sql/migrate_post_feed_v1.sql
sql/migrate_post_feed_v2.sql
```
Despu茅s se ejecutan `sql/verify_post_feed_v1.sql` y
`sql/verify_post_feed_v2.sql`. Los rollbacks est谩n separados; el rollback V1 es
destructivo y solo debe usarse en emergencia. Para inicializaci贸n completa usa
`sql/new_pgvector_schema.sql` dentro de la BD `nlp_vectors`.
La API NLP usa:
```sql
match_posts(query_embedding VECTOR(300), match_count INTEGER, filters JSONB)
```
Los jobs usan:
```sql
upsert_post_embedding(
p_external_id TEXT,
p_document TEXT,
p_metadata JSONB,
p_embedding VECTOR(300),
p_content_hash TEXT,
p_embedding_model TEXT,
p_embedding_version TEXT,
p_is_active BOOLEAN
)
```
El SQL completo de referencia esta en:
```text
sql/aws_pgvector_contract.sql
```
|