SQL Academy · Oppitunti

Trigrammihaku (pg_trgm) epätarkkaan täsmäytykseen

Etsi samankaltaisia merkkijonoja pg_trgm-laajennuksella, GiST/GIN-trigrammi-indekseillä ja similarity()-funktiolla.

Oppitunti 1/414 vaihetta

Trigrammihaku (pg_trgm) epätarkkaan täsmäytykseen on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu SQL Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Miksi trigrammit

LIKE %word% ei voi käyttää B-tree-indeksiä. Trigrammit ("kolmen merkin osajonot") yhdistettynä GIN- tai GiST-indeksiin mahdollistavat nopean sumean ja osajononhaun.

Ota laajennus käyttöön

pg_trgm sisältyy PostgreSQL contrib -pakettiin:

CREATE EXTENSION IF NOT EXISTS pg_trgm;

Sanan trigrammit

Näytä merkkijonon trigrammit:

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

Samankaltaisuusfunktio

Liukuluku välillä [0..1]:

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

%-operaattori

Palauttaa true-arvon, jos samankaltaisuus ylittää kynnysarvon (oletus 0.3):

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

Osajononhaun indeksi

GIN-trigrammi-indeksi nopeuttaa LIKE '%word%' -hakua:

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 vs. GIN

  • GIN — nopeammat haut, hitaammat kirjoitukset, suurempi indeksi
  • GiST — nopeammat kirjoitukset, hitaammat haut, pienempi indeksi

Useimmat tiimit valitsevat GIN-indeksin sumeaan hakuun.

Sumean vastaavuuden kyselyt

Etsi samankaltaisia merkkijonoja myös kirjoitusvirheiden tapauksessa:

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

Etäisyys järjestämistä varten

<->-operaattori palauttaa etäisyyden (1 - samankaltaisuus), joten voit käyttää ORDER BY distance ASC -lauseketta:

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

Automaattinen täydennys trigrammeilla

Yhdistä pg_trgm LIKE-etuliitteeseen saadaksesi nopean automaattisen täydennyksen:

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

Trigrammien rajoitukset

Trigrammit toimivat syötteen aakkoston perusteella. CJK-kielet tarvitsevat erilaisen tokenisoinnin. Käytä täyteen luonnollisen kielen hakuun tsvectoria ja GIN-indeksiä.

Yhdistäminen muihin indekseihin

Useita suodattimia sisältävä kysely voi käyttää trigrammi-indeksiä JA B-tree-indeksiä Bitmap And -operaation kautta:

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

Kertaus

pg_trgm ratkaisee "alkavan jokerimerkin" ongelman.

  • GIN-trigrammi-indeksi → nopea LIKE %x% -haku
  • %-operaattori ja similarity() sumeaan vastaavuuteen
  • <->-etäisyys järjestämistä varten
  • Sopii erinomaisesti automaattiseen täydennykseen ja kirjoitusvirheitä sietävään hakuun

Pikatarkistus

Miksi tavallinen B-tree-indeksi ei auta ehdossa WHERE name LIKE '%alice%'?

Aloita maksutta

Opi SQL tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
46
Oppitunnit
183

Usein kysytyt kysymykset

Onko oppitunti ”Trigrammihaku (pg_trgm) epätarkkaan täsmäytykseen” ilmainen?

Kyllä – oppitunnin ”Trigrammihaku (pg_trgm) epätarkkaan täsmäytykseen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko SQL Academy-kurssin, päivitä CoddyKit PROhon. SQL Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Trigrammihaku (pg_trgm) epätarkkaan täsmäytykseen”?

Etsi samankaltaisia merkkijonoja pg_trgm-laajennuksella, GiST/GIN-trigrammi-indekseillä ja similarity()-funktiolla. Harjoittelet SQL Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni SQL Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin SQL Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”Trigrammihaku (pg_trgm) epätarkkaan täsmäytykseen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä SQL Academy-oppitunnilla?

Kyllä. Jokainen SQL Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Trigrammihaku (pg_trgm) epätarkkaan täsmäytykseen
  2. Kokotekstihaku tsvectorilla ja GIN:llä
  3. Geospatiaalinen indeksointi PostGISillä
  4. Vektorihaku pgvectorilla
← Takaisin: SQL Academy