SQL Academy · Oppitunti

Kokotekstihakujen johdanto (tsvector, to_tsquery)

Indeksoikaa dokumentteja tsvector-tyypillä, suorittakaa luonnollisen kielen kyselyitä to_tsquery-funktiolla ja järjestäkää tuloksia ts_rank-funktiolla.

Oppitunti 4/414 vaihetta

Kokotekstihakujen johdanto (tsvector, to_tsquery) on ilmainen SQL Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/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 kokotekstihaku?

LIKE/ILIKE etsii alimerkkijonoja. Kokotekstihaku ymmärtää sanat: sanavartalot, poistosanat, kielisäännöt ja relevanssin järjestämisen. Se on sisäänrakennettu PostgreSQL:ään — laajennusta ei tarvita.

Kaksi ydintyyppiä

Kokotekstihaku perustuu kahteen tyyppiin:

  • tsvector — jäsennetty dokumentti: lekseemit + sijainnit
  • tsquery — jäsennetty kysely: lekseemit + Boolen operaattorit

Yhdistä ne @@-operaattorilla.

Dokumentin jäsentäminen

Muunna raakateksti tsvector-arvoksi:

SELECT to_tsvector('english', 'The quick brown foxes jump over the lazy dogs');
-- 'brown':3 'dog':9 'fox':4 'jump':5 'lazi':8 'quick':2
-- Stop words ('the', 'over') dropped; words stemmed (foxes → fox)

Kyselyn jäsentäminen

Samoin hakusyöte:

SELECT to_tsquery('english', 'foxes & dogs');
-- 'fox' & 'dog'

Täsmäytys

Käytä @@-operaattoria testaamiseen:

SELECT to_tsvector('english', 'The lazy fox')
        @@ to_tsquery('english', 'fox');    -- TRUE

Dokumenttitaulun indeksointi

Lisää tsvector-sarake ja GIN-indeksi nopeita kyselyitä varten:

CREATE TABLE articles (
  id BIGSERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  body  TEXT NOT NULL
);

-- Either keep a generated tsvector column:
ALTER TABLE articles
  ADD COLUMN search_doc tsvector
    GENERATED ALWAYS AS (
      to_tsvector('english',
        coalesce(title,'') || ' ' || coalesce(body,'')
      )
    ) STORED;

CREATE INDEX articles_search_idx ON articles USING GIN (search_doc);

Haku

Indeksin avulla kyselyt ovat nopeita:

SELECT id, title
FROM articles
WHERE search_doc @@ to_tsquery('english', 'postgres & json')
ORDER BY id DESC;

Boolen operaattorit kyselyissä

tsquery tukee operaattoreita & (AND), | (OR), ! (NOT) sekä ryhmittelyä:

to_tsquery('english', '(cat | dog) & !rabbit');

Lausekehaku

Käytä <->-operaattoria vierekkäisille sanoille:

to_tsquery('english', 'postgres <-> performance');
-- finds 'postgres performance', not 'postgres is great for performance'

Helppokäyttöiset verkkokyselyt: websearch_to_tsquery

Hyväksy Google-tyyliset kyselyt:

SELECT websearch_to_tsquery('english', 'postgres "json indexing" -mongo');

Tulosten järjestäminen relevanssin mukaan

Laske järjestysarvo ts_rank- tai ts_rank_cd-funktiolla:

SELECT id, title,
       ts_rank(search_doc, query) AS rank
FROM articles, to_tsquery('english', 'postgres & json') AS query
WHERE search_doc @@ query
ORDER BY rank DESC
LIMIT 20;

Korostaminen

Näytä osumat sisältävät katkelmat:

SELECT ts_headline('english', body,
  to_tsquery('english', 'postgres & json'),
  'StartSel=<mark>,StopSel=</mark>')
FROM articles
WHERE search_doc @@ to_tsquery('english', 'postgres & json');

Kertaus

Kokotekstihaku on sisäänrakennettu PostgreSQL:ään.

  • tsvector + tsquery + @@
  • GIN-indeksi nopeutta varten
  • websearch_to_tsquery ihmisen kirjoittamille syötteille
  • ts_rank relevanssin mukaiseen järjestämiseen

Pikatesti

Millä operaattorilla tsvector-arvoa verrataan tsquery-arvoon?

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 ”Kokotekstihakujen johdanto (tsvector, to_tsquery)” ilmainen?

Kyllä – oppitunnin ”Kokotekstihakujen johdanto (tsvector, to_tsquery)” 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 ”Kokotekstihakujen johdanto (tsvector, to_tsquery)”?

Indeksoikaa dokumentteja tsvector-tyypillä, suorittakaa luonnollisen kielen kyselyitä to_tsquery-funktiolla ja järjestäkää tuloksia ts_rank-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 4/4.

Kuinka kauan ”Kokotekstihakujen johdanto (tsvector, to_tsquery)”-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. Merkkijonojen yhdistäminen: || ja CONCAT
  2. UPPER, LOWER, SUBSTRING, REPLACE
  3. TRIM, LPAD, RPAD
  4. Kokotekstihakujen johdanto (tsvector, to_tsquery)
← Takaisin: SQL Academy