Trigrammihaku (pg_trgm) epätarkkaan täsmäytykseen
Etsi samankaltaisia merkkijonoja pg_trgm-laajennuksella, GiST/GIN-trigrammi-indekseillä ja similarity()-funktiolla.
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%'?
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
- Trigrammihaku (pg_trgm) epätarkkaan täsmäytykseen
- Kokotekstihaku tsvectorilla ja GIN:llä
- Geospatiaalinen indeksointi PostGISillä
- Vektorihaku pgvectorilla