0Pricing
SQL Academy · Lekcja

Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego

Znajdować podobne ciągi za pomocą rozszerzenia pg_trgm, indeksów trigramowych GiST/GIN i funkcji similarity()

Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Dlaczego trigramy

LIKE %word% nie może użyć indeksu B-tree. Trigramy („podciągi o długości 3 znaków”) w połączeniu z GIN/GiST zapewniają szybkie wyszukiwanie przybliżone i wyszukiwanie podciągów.

Włączenie rozszerzenia

pg_trgm jest dostarczane wraz z modułem contrib PostgreSQL:

CREATE EXTENSION IF NOT EXISTS pg_trgm;

Trigram słowa

Wyświetlanie trigramów ciągu znaków:

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

Funkcja podobieństwa

Liczba zmiennoprzecinkowa z zakresu [0..1]:

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

Operator %

Zwraca wartość true, jeśli podobieństwo przekracza próg (domyślnie 0.3):

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

Indeks do wyszukiwania podciągów

Indeks trigramowy GIN przyspiesza LIKE '%word%':

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 a GIN

  • GIN — szybsze odczyty, wolniejsze zapisy, większy indeks
  • GiST — szybsze zapisy, wolniejsze odczyty, mniejszy indeks

Większość zespołów wybiera GIN do wyszukiwania przybliżonego.

Zapytania z dopasowaniem przybliżonym

Znajdowanie podobnych ciągów znaków nawet z literówkami:

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

Odległość do sortowania wyników

Operator <-> zwraca odległość (1 - podobieństwo), dzięki czemu można użyć ORDER BY distance ASC:

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

Autouzupełnianie za pomocą trigramów

Połączenie pg_trgm z prefiksem LIKE zapewnia szybkie autouzupełnianie:

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

Ograniczenia trigramów

Trigramy działają na alfabecie danych wejściowych. Języki CJK wymagają innej tokenizacji. Do pełnotekstowego wyszukiwania w języku naturalnym należy użyć tsvector + GIN.

Łączenie z innymi indeksami

Zapytanie z wieloma filtrami może użyć indeksu trigramowego oraz B-tree za pośrednictwem Bitmap And:

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

Podsumowanie

pg_trgm rozwiązuje problem „wildcardu na początku”.

  • Indeks trigramowy GIN → szybkie LIKE %x%
  • Operator % i similarity() do dopasowania przybliżonego
  • Odległość <-> do sortowania wyników
  • Świetne rozwiązanie do autouzupełniania i wyszukiwania odpornego na literówki

Szybki test

Dlaczego zwykły indeks B-tree nie pomaga w przypadku WHERE name LIKE '%alice%'?

Często zadawane pytania

Czy lekcja „Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego” jest bezpłatna?

Tak — pełny tekst „Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego”?

Znajdować podobne ciągi za pomocą rozszerzenia pg_trgm, indeksów trigramowych GiST/GIN i funkcji similarity() Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego
  2. Wyszukiwanie pełnotekstowe za pomocą tsvector i GIN
  3. Indeksowanie geoprzestrzenne za pomocą PostGIS
  4. Wyszukiwanie wektorowe za pomocą pgvector
← Powrót do SQL Academy