Tema SQL
to_tsvector() (PostgreSQL)
Tokeniza texto según un diccionario de búsqueda (idioma) y devuelve tsvector para full-text search. Junto a to_tsquery y el índice GIN/GiST forma el motor de búsqueda integrado de PostgreSQL.
Descripción
to_tsvector( [ regconfig , ] texto ) normaliza: minúsculas, elimina stop words según configuración, stemming opcional. El regconfig (p. ej. spanish, english) debe alinearse con el idioma del contenido y con to_tsquery. Los tsvector se almacenan en columnas generadas o índices para acelerar @@. plainto_tsquery y phraseto_tsquery son alternativas de entrada más indulgentes que to_tsquery manual. No sustituye a ILIKE en prefijos cortos sin índice adecuado: el FTS brilla en texto natural y ranking ts_rank. MySQL tiene FULLTEXT con otro modelo; SQL Server CONTAINS.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
to_tsvector([ regconfig , ] texto)
-- Ejemplo
to_tsvector('spanish', 'Hola mundo');
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- regconfig
- Ajusta idioma y lista de stop words; crítico para calidad.
- @@
- Operador de coincidencia entre tsvector y tsquery.
- Índices
- CREATE INDEX … USING GIN (to_tsvector(…)); acelera búsquedas.
Ejemplos
Ejemplo 1
SELECT to_tsvector('spanish', 'Hola mundo');
SELECT id, titulo
FROM articulos
WHERE to_tsvector('spanish', cuerpo) @@ to_tsquery('spanish', 'hola & mundo');
Ejemplo 2
CREATE INDEX idx_art_ft ON articulos
USING GIN (to_tsvector('spanish', titulo || ' ' || coalesce(resumen, '')));
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.