0Pricing
SQL Academy · Lección

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':2

Crear 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;     -- t

Indexació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

  1. Búsqueda por trigramas (pg_trgm) para coincidencias aproximadas
  2. Búsqueda de texto completo con tsvector y GIN
  3. Indexación geoespacial con PostGIS
  4. Búsqueda vectorial con pgvector
← Volver a SQL Academy