Trigram-søk (pg_trgm) for omtrentlig treff
Finn lignende strenger med utvidelsen pg_trgm, GiST/GIN-trigramindekser og similarity().
Trigram-søk (pg_trgm) for omtrentlig treff er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.
Hvorfor trigrams?
LIKE %word% kan ikke bruke en B-tree-indeks. Trigrams («delstrenger på 3 tegn») kombinert med GIN/GiST gir raskt uklart samsvar og delstrengsøk.
Aktiver utvidelsen
pg_trgm leveres med PostgreSQL contrib:
CREATE EXTENSION IF NOT EXISTS pg_trgm;Trigram for et ord
Vis trigrammene i en streng:
SELECT show_trgm('database');
-- {dat, aba, atab, tab, abas, base, ase, ...}Likhetsfunksjonen
Flyttall i [0..1]:
SELECT similarity('database', 'datbase'); -- ~0.75
SELECT similarity('hello', 'world'); -- ~0.0% Operatoren
Returnerer true hvis likheten ligger over terskelen (standardverdien er 0.3):
SELECT 'database' % 'datbase'; -- t
SET pg_trgm.similarity_threshold = 0.4;Indeks for delstrengsøk
En GIN-trigramindeks gjør LIKE '%word%' raskt:
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 kontra GIN
- GIN – raskere lesing, tregere skriving, større indeks
- GiST – raskere skriving, tregere lesing, mindre indeks
De fleste team velger GIN for uklart samsvar.
Spørringer for uklart samsvar
Finn lignende strenger, selv når de inneholder skrivefeil:
SELECT full_name, similarity(full_name, 'datbase') AS sim
FROM users
WHERE full_name % 'datbase'
ORDER BY sim DESC
LIMIT 10;Avstand for rangering
Operatoren <-> returnerer avstanden (1 - likheten), slik at du kan bruke ORDER BY distance ASC:
SELECT full_name
FROM users
WHERE full_name % 'alice'
ORDER BY full_name <-> 'alice'
LIMIT 10;Autofullføring med trigrams
Kombiner pg_trgm med LIKE-prefiks for rask autofullføring:
SELECT name
FROM products
WHERE name % $1
OR name ILIKE $1 || '%'
ORDER BY similarity(name, $1) DESC
LIMIT 8;Begrensninger ved trigrams
Trigrams fungerer på alfabetet i inndataene. CJK-språk trenger en annen tokenisering. For fullstendig naturlig språksøk kan du bruke tsvector + GIN.
Kombinere med andre indekser
En spørring med flere filtre kan bruke både en trigramindeks og en B-tree via Bitmap And:
EXPLAIN ANALYZE
SELECT * FROM users
WHERE full_name ILIKE '%ali%' AND country = 'US';Oppsummering
pg_trgm løser problemet med «ledende jokertegn».
- GIN-trigramindeks → rask LIKE %x%
- % operatoren og similarity() for uklart samsvar
- <->-avstand for rangering
- Svært godt egnet for autofullføring og søk som tåler skrivefeil
Hurtigsjekk
Hvorfor kan ikke en vanlig B-treindeks hjelpe med WHERE name LIKE '%alice%'?
Lær deg SQL med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 46
- Leksjoner
- 183
Ofte stilte spørsmål
Er leksjonen «Trigram-søk (pg_trgm) for omtrentlig treff» gratis?
Ja – hele teksten i «Trigram-søk (pg_trgm) for omtrentlig treff» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Trigram-søk (pg_trgm) for omtrentlig treff»?
Finn lignende strenger med utvidelsen pg_trgm, GiST/GIN-trigramindekser og similarity(). Du øver på SQL Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med SQL Academy?
Ingen tidligere erfaring er nødvendig. SQL Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Trigram-søk (pg_trgm) for omtrentlig treff»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne SQL Academy-leksjonen?
Ja. Alle SQL Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Trigram-søk (pg_trgm) for omtrentlig treff
- Fulltekstsøk med tsvector og GIN
- Geospatial indeksering med PostGIS
- Vektorsøk med pgvector