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.0Operator %
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
- Wyszukiwanie trigramowe (pg_trgm) na potrzeby dopasowania przybliżonego
- Wyszukiwanie pełnotekstowe za pomocą tsvector i GIN
- Indeksowanie geoprzestrzenne za pomocą PostGIS
- Wyszukiwanie wektorowe za pomocą pgvector