0Pricing
SQL Academy · Lección

Búsqueda por trigramas (pg_trgm) para coincidencias aproximadas

Encuentre cadenas similares con la extensión pg_trgm, índices de trigramas GiST/GIN y similarity().

Búsqueda por trigramas (pg_trgm) para coincidencias aproximadas es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 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.

¿Por qué trigramas?

LIKE %word% no puede utilizar un índice B-tree. Los trigramas («subcadenas de 3 caracteres»), combinados con GIN/GiST, permiten realizar búsquedas difusas y de subcadenas rápidamente.

Habilitar la extensión

pg_trgm se incluye con PostgreSQL contrib:

CREATE EXTENSION IF NOT EXISTS pg_trgm;

Trigrama de una palabra

Muestre los trigramas de una cadena:

SELECT show_trgm('database');
-- {dat, aba, atab, tab, abas, base, ase, ...}

Función de similitud

Valor de tipo float en [0..1]:

SELECT similarity('database', 'datbase');     -- ~0.75
SELECT similarity('hello', 'world');             -- ~0.0

El operador %

Devuelve true si la similitud supera el umbral (0,3 de forma predeterminada):

SELECT 'database' % 'datbase';      -- t
SET pg_trgm.similarity_threshold = 0.4;

Índice para búsquedas de subcadenas

El índice GIN de trigramas hace que LIKE '%word%' sea rápido:

CREATE INDEX users_name_trgm ON users USING GIN (full_name gin_trgm_ops);

-- Now this is index-supported:
SELECT * FROM users WHERE full_name ILIKE '%ali%';

GiST frente a GIN

  • GIN: lecturas más rápidas, escrituras más lentas e índice más grande
  • GiST: escrituras más rápidas, lecturas más lentas e índice más pequeño

La mayoría de los equipos eligen GIN para las búsquedas difusas.

Consultas de coincidencia difusa

Encuentre cadenas similares incluso con errores tipográficos:

SELECT full_name, similarity(full_name, 'datbase') AS sim
FROM users
WHERE full_name % 'datbase'
ORDER BY sim DESC
LIMIT 10;

Distancia para ordenar

El operador <-> devuelve la distancia (1 - similitud), por lo que puede usar ORDER BY distance ASC:

SELECT full_name
FROM users
WHERE full_name % 'alice'
ORDER BY full_name <-> 'alice'
LIMIT 10;

Autocompletado con trigramas

Combine pg_trgm con un prefijo LIKE para obtener un autocompletado ágil:

SELECT name
FROM products
WHERE name % $1
   OR name ILIKE $1 || '%'
ORDER BY similarity(name, $1) DESC
LIMIT 8;

Limitaciones de los trigramas

Los trigramas funcionan con el alfabeto de entrada. Los idiomas CJK necesitan una tokenización diferente. Para búsquedas completas en lenguaje natural, use tsvector + GIN.

Combinación con otros índices

Una consulta con varios filtros puede utilizar un índice de trigramas Y un B-tree mediante Bitmap And:

EXPLAIN ANALYZE
SELECT * FROM users
WHERE full_name ILIKE '%ali%' AND country = 'US';

Resumen

pg_trgm resuelve el problema del «comodín inicial».

  • Índice GIN de trigramas → LIKE %x% rápido
  • Operador % y similarity() para coincidencias difusas
  • Distancia <-> para ordenar los resultados
  • Excelente para autocompletado y búsquedas tolerantes a errores tipográficos

Comprobación rápida

¿Por qué un índice B-tree normal no puede ayudar con WHERE name LIKE '%alice%'?

Preguntas frecuentes

¿La lección «Búsqueda por trigramas (pg_trgm) para coincidencias aproximadas» es gratis?

Sí — el texto completo de «Búsqueda por trigramas (pg_trgm) para coincidencias aproximadas» 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 por trigramas (pg_trgm) para coincidencias aproximadas»?

Encuentre cadenas similares con la extensión pg_trgm, índices de trigramas GiST/GIN y similarity(). 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 1 de 4.

¿Cuánto tiempo toma la lección «Búsqueda por trigramas (pg_trgm) para coincidencias aproximadas»?

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