PostgreSQL

Esimerkkejä PostgreSQL-kokotekstihausta

Esimerkkejä PostgreSQL-kokotekstihausta
Kaikilla tietokannoilla tulisi olla tehokas ja monipuolinen hakukyky. Aina kun viitataan tietokantoihin, PostgreSQL hallitsee kaikki käsityöt. Se yhdistää kaikki asiat, joista olet rakastunut SQL: n kanssa, useiden muiden kuin SQL-tietokantatoimintojen kanssa. Kaikki näistä ei-SQL-toiminnoista, kuten JSONB-tietojen lajittelu, ovat upeita, eikä sinun tarvitse edes kokeilla toista tietokantaa. Koko tekstihaku on yksi uusimmista ei-SQL-ominaisuuksista, jotka on sisällytetty PostgreSQL: ään. Onko PostgreSQL: n kokotekstihaku täysin toimiva, vai haluatko erillisen hakemiston? Jos pystyt jotenkin kehittämään täydellisen tekstihaun, joka on vailla yhden koodikannen lisäämistä, se olisi upea idea. Olet jo perehtynyt mallihakuun MySQL-tietokannassa. Joten katsotaan ensin heitä. Avaa PostgreSQL-komentorivikuori tietokonejärjestelmässäsi. Kirjoita palvelimen otsikko, tietokannan nimi, portin numero, käyttäjänimi ja salasana muulle käyttäjälle kuin oletusasetuksille. Jos haluat lyödä oletusnäkökohtia, jätä kaikki valinnat tyhjiksi ja paina Enter kutakin vaihtoehtoa. Tällä hetkellä komentorivisi kuori on varustettu toimimaan.

Kokotekstihaun käsitteen ymmärtämiseksi sinun on muistettava mallihakutiedot LIKE-avainsanan kautta. Oletetaan siis, että tietokannan "testi" taulukko "henkilö" sisältää seuraavat tietueet.

>> VALITSE * FROM henkilö;

Oletetaan, että haluat hakea tämän taulukon tietueet, jossa sarakkeessa nimi on jokaisessa arvossaan merkki i. Kokeile alla olevaa SELECT-kyselyä, kun käytät LIKE-lauseketta komentokuoressa. Alla olevasta lähdöstä näet, että sarakkeessa nimi on vain 5 tietuetta tälle merkille 'i'.

>> VALITSE * HENKILÖSTÄ, JOSKIN nimi LIKE '% i%';

Tvsectorin käyttö:

Joskus ei ole mitään hyötyä käyttää LIKE-avainsanaa nopeaan kuvahakuun, vaikka sana on olemassa. Ehkä harkitsisit vakiolausekkeiden käyttöä, ja vaikka tämä on toteutettavissa oleva vaihtoehto, säännölliset lausekkeet ovat sekä vahvoja että hitaita. Menettelyvektorin käyttäminen kokonaisia ​​sanoja varten tekstissä, näiden sanojen kansankielinen kuvaus, on paljon tehokkaampi tapa käsitellä tätä ongelmaa. Täydellisen tekstihaun käsite ja tietotyyppi tsvector luotiin vastaamaan siihen. PostgreSQL: ssä on kaksi tapaa, jotka tekevät juuri haluamamme:

Esimerkki 01:

Aloitetaan yksinkertaisesta esimerkistä vektorin luomisesta. Oletetaan, että haluat tehdä vektorin merkkijonolle: ”Joillakin ihmisillä on kiharat ruskeat hiukset kunnollisella harjauksella.”. Joten sinun on kirjoitettava to_tvsector () -funktio tämän lauseen kanssa alla olevan liitteen SELECT-kyselyyn. Alla olevasta lähdöstä näet, että se tuottaa vektorin viitteistä (tiedostojen sijainnit) kullekin tunnukselle ja myös silloin, kun termit, joilla on vähän kontekstia, kuten artikkelit (ja) ja liitännät (ja tai tai), jätetään tietoisesti huomiotta.

>> SELECT to_tsvector ('Joillakin ihmisillä on kiharat ruskeat hiukset oikean harjauksen avulla');

Esimerkki 02:

Oletetaan, että sinulla on kaksi asiakirjaa, joissa molemmissa on joitain tietoja. Tämän datan tallentamiseen käytämme nyt todellista esimerkkiä tunnusten luomisesta. Oletetaan, että olet luonut tietokannan "testi" -taulukon "Data", jossa on joitain sarakkeita, käyttämällä alla olevaa Luo taulukko -kyselyä. Älä unohda luoda siihen TVSECTOR-tyyppistä saraketta nimeltä 'token'. Alla olevasta lähdöstä voit katsoa luotua taulukkoa.

>> LUO TAULUKON TIEDOT (Id SERIAL PRIMARY KEY, info TEXT, token TSVECTOR);

Nyt meidän on lisättävä molempien tässä taulukossa olevien asiakirjojen kokonaistiedot. Joten kokeile alla olevaa INSERT-komentoa komentorivin kuoressa tehdäksesi niin. Lopuksi molempien asiakirjojen tietueet on lisätty onnistuneesti taulukkoon Data.

>> INSERT INTO data (info) ARVOT ('Kaksi vääryyttä ei voi koskaan tehdä yhtä oikeaksi.'), (' Hän voi pelata jalkapalloa.'), (' Voinko olla mukana tässä?'), (' Yhden sisällä olevaa kipua ei voida ymmärtää '), (' Tuo persikka elämääsi);

Nyt sinun täytyy asuttaa molempien asiakirjojen tunnussarake niiden tietyllä vektorilla. Viime kädessä yksinkertainen UPDATE-kysely täyttää tunnussarakkeen vastaavalla vektorilla jokaiselle tiedostolle. Joten sinun on suoritettava alla mainittu kysely komentokuoressa tehdäksesi niin. Lähtö osoittaa, että päivitys on viimeinkin tehty.

>> PÄIVITÄ Data f1 SET -tunnus = to_tsvector (f1.info) FROM Data f2;

Nyt kun meillä on kaikki paikoillaan, palataan takaisin kuvaukseen "voi" skannauksella. To_tsquery AND -operaattorilla, kuten aiemmin mainittiin, ei tee eroa tiedostojen sijaintien välillä tiedostoissa, kuten alla esitetyssä lähdössä näkyy.

>> SELECT ID, info FROM Data WHERE -tunnus @@ to_tsquery ('voi & yksi');

Esimerkki 04:

Löydämme sanat, jotka ovat “vierekkäin”, kokeilemalla samaa kyselyä '<->"operaattori. Muutos näkyy alla olevassa lähdössä.

>> SELECT ID, info FROM Data WHERE -tunnus @@ to_tsquery ('voi <-> yksi');

Tässä on esimerkki välittömästä sanasta toisen vieressä.

>> SELECT ID, info FROM Data WHERE -tunnus @@ to_tsquery ('yksi <-> kipu');

Esimerkki 05:

Löydämme sanat, jotka eivät ole heti vierekkäin, käyttämällä etäisyysoperaattorissa olevaa numeroa etäisyyden vertailuun. 'Tuo' ja 'elämän välinen läheisyys on 4 sanaa erillään näytetystä kuvasta.

>> SELECT * FROM Data WHERE -tunnus @@ to_tsquery ('tuo <4> elämä ');

Lähes viiden sanan sanojen välisen läheisyyden tarkistamiseksi on liitteenä.

>> SELECT * FROM Data WHERE -tunnus @@ to_tsquery ('väärin <5> oikea ');

Päätelmä:

Lopuksi olet tehnyt kaikki yksinkertaiset ja monimutkaiset esimerkit kokotekstihausta To_tvsector- ja to_tsquery-operaattoreiden ja toimintojen avulla.

Parhaat pelikonsoliemulaattorit Linuxille
Tässä artikkelissa luetellaan suositut pelikonsolin emulointiohjelmistot, jotka ovat saatavana Linuxille. Emulointi on ohjelmistojen yhteensopivuusker...
Best Linux Distros for Gaming in 2021
The Linux operating system has come a long way from its original, simple, server-based look. This OS has immensely improved in recent years and has no...
Kuinka siepata ja suoratoistaa pelisessiosi Linuxissa
Aikaisemmin pelaamista pidettiin vain harrastuksena, mutta ajan myötä pelialalla tapahtui valtava kasvu tekniikan ja pelaajien määrän suhteen. Peliala...