Tema SQL
to_tsquery() (PostgreSQL)
Construye un tsquery a partir de una cadena con operadores booleanos y prefijos de lexemas (&, |, !, :*). Entrada más estricta que plainto_tsquery; debe alinearse con el mismo regconfig que to_tsvector.
Descripción
to_tsquery( [ regconfig , ] texto ) interpreta lexemas y operadores: jupiter & saturn, foo | bar, !malo, prefijo:super:*. Errores de sintaxis lanzan excepción; en búsquedas ad hoc desde usuario suele preferirse plainto_tsquery o websearch_to_tsquery (versiones recientes). Combina con @@ sobre columnas tsvector o expresiones indexadas. Para ranking usa ts_rank o ts_rank_cd. Validar y escapar entrada de usuarios para evitar inyección lógica en la cadena de consulta. MySQL/SQL Server usan otros lenguajes de búsqueda full-text.
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_tsquery([ regconfig , ] consulta_texto)
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.
- Operadores
- & AND, | OR, ! NOT, :* prefijo de lexema.
- Seguridad
- No concatenar texto de usuario sin saneamiento; usar funciones recomendadas para búsqueda web.
- Alternativas
- plainto_tsquery para frases simples; phraseto_tsquery para frases exactas.
Ejemplos
Ejemplo 1
SELECT to_tsquery('hola & mundo');
SELECT to_tsquery('spanish', 'ciudad & madrid');
Ejemplo 2
SELECT *
FROM docs
WHERE col_tsvector @@ websearch_to_tsquery('spanish', 'búsqueda libre');
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.