Búsqueda de texto completo con tsvector y GIN
Construya una búsqueda de texto completo lista para producción con columnas tsvector, índices GIN y diccionarios configurables de búsqueda de texto.
Búsqueda de texto completo con tsvector y GIN es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
Más allá de las subcadenas: búsqueda orientada a palabras
La búsqueda de texto completo (FTS) entiende las palabras: derivación, palabras vacías y clasificación. PostgreSQL la incorpora mediante los tipos tsvector / tsquery.
Crear un tsvector
Analice un documento:
SELECT to_tsvector('english', 'The quick brown foxes jumped over');
-- 'brown':3 'fox':4 'jump':5 'quick':2Crear un tsquery
Analice una consulta:
SELECT to_tsquery('english', 'fox & jumping'); -- 'fox' & 'jump'
SELECT websearch_to_tsquery('english', 'fox jumping -lazy');Coincidencia: @@
Pruebe un documento frente a una consulta:
SELECT 'fox jumping'::tsvector @@ 'fox & jump'::tsquery; -- tIndexación para FTS
Añada una columna tsvector y un índice GIN:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
to_tsvector('english', coalesce(title,'') || ' ' || coalesce(body,''))
) STORED;
CREATE INDEX articles_search_idx ON articles USING GIN (search_doc);Consultas
Búsqueda rápida con filtros:
SELECT id, title FROM articles
WHERE search_doc @@ websearch_to_tsquery('english', 'postgres performance')
ORDER BY ts_rank(search_doc, websearch_to_tsquery('english', 'postgres performance')) DESC
LIMIT 20;Clasificación con ts_rank
ts_rank asigna una puntuación a los resultados según la frecuencia y la posición de las palabras. ts_rank_cd usa Cover Density (considera la posición):
SELECT id, ts_rank_cd(search_doc, q) AS rank
FROM articles, websearch_to_tsquery('english', $1) AS q
WHERE search_doc @@ q
ORDER BY rank DESC LIMIT 20;Fragmentos con ts_headline
Muestre fragmentos coincidentes con las palabras encontradas resaltadas:
SELECT ts_headline('english', body,
websearch_to_tsquery('english', $1),
'StartSel=<mark>, StopSel=</mark>, MaxFragments=2')
FROM articles
WHERE search_doc @@ websearch_to_tsquery('english', $1);Búsqueda de frases
Busque palabras adyacentes:
SELECT * FROM articles
WHERE search_doc @@ phraseto_tsquery('english', 'database performance');Ponderación de varios campos
Dé más peso al título que al cuerpo mediante setweight:
ALTER TABLE articles
ADD COLUMN search_doc tsvector
GENERATED ALWAYS AS (
setweight(to_tsvector('english', coalesce(title,'')), 'A') ||
setweight(to_tsvector('english', coalesce(body,'')), 'B')
) STORED;Configuración del idioma
La configuración english define las palabras vacías, la derivación, etc. PostgreSQL incluye muchos idiomas; cambie de idioma según corresponda:
SELECT to_tsvector('turkish', 'Veritabanı performansı');Limitaciones de la FTS integrada
Es adecuada para idiomas similares al inglés y ofrece una clasificación básica. Para necesidades más avanzadas (BM25, embeddings vectoriales y búsqueda facetada), considere Elasticsearch u OpenSearch junto con Postgres.
Resumen
La FTS de PostgreSQL es una opción predeterminada competente.
- Coincidencia mediante tsvector + tsquery + @@
- Índice GIN para obtener velocidad
- websearch_to_tsquery para entradas de usuarios
- ts_rank/ts_headline para resultados clasificados y resaltados
Comprobación rápida
Necesita filtrar rápidamente artículos mediante una consulta de texto completo. ¿Qué índice debe usar?
Preguntas frecuentes
¿La lección «Búsqueda de texto completo con tsvector y GIN» es gratis?
Sí — el texto completo de «Búsqueda de texto completo con tsvector y GIN» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Búsqueda de texto completo con tsvector y GIN»?
Construya una búsqueda de texto completo lista para producción con columnas tsvector, índices GIN y diccionarios configurables de búsqueda de texto. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Búsqueda de texto completo con tsvector y GIN»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Búsqueda por trigramas (pg_trgm) para coincidencias aproximadas
- Búsqueda de texto completo con tsvector y GIN
- Indexación geoespacial con PostGIS
- Búsqueda vectorial con pgvector