PostgreSQL

Primeri iskanja celotnega besedila PostgreSQL

Primeri iskanja celotnega besedila PostgreSQL
Vsaka baza podatkov mora imeti učinkovito in vsestransko zmogljivost iskanja. Kadar koli se nanaša na podatkovne baze, je PostgreSQL mojster vseh obrti. Združuje vse stvari, ki so vam bile všeč z SQL, z množico funkcij zbirke podatkov, ki niso SQL. Katera koli od teh funkcij, ki niso SQL, na primer razvrščanje informacij JSONB, je fantastična in ne bi vam bilo treba preizkusiti druge baze podatkov. Iskanje celotnega besedila je ena najnovejših funkcij, ki niso vključene v SQL, vključene v PostgreSQL. Ali je iskanje po celotnem besedilu PostgreSQL popolnoma funkcionalno ali bi želeli ločen indeks iskanja? Če bi lahko nekako razvili celotno iskanje besedila, ki bi mu bilo treba dodati še en ovitek kode, bi bila fantastična ideja. Z iskanjem vzorcev ste že seznanjeni v zbirki podatkov MySQL. Torej, najprej si jih oglejmo. V računalniškem sistemu odprite lupino ukazne vrstice PostgreSQL. Napišite naslov strežnika, ime baze podatkov, številko vrat, uporabniško ime in geslo za določenega uporabnika, razen privzetih možnosti. Če želite slogati s privzetimi premisleki, pustite vse možnosti prazne in pritisnite Enter vsako možnost. Trenutno je lupina ukazne vrstice opremljena za delo.

Če želite razumeti koncept iskanja po celotnem besedilu, se morate spomniti znanja o iskanju vzorcev s pomočjo ključne besede LIKE. Predpostavimo torej tabelo 'oseba' v 'testu' zbirke podatkov z naslednjimi zapisi.

>> IZBERI * OD osebe;

Predpostavimo, da želite pridobiti zapise te tabele, kjer ima stolpec 'ime' znak 'i' v kateri koli vrednosti. Med uporabo stavka LIKE v ukazni lupini poskusite s spodnjo poizvedbo SELECT. Iz spodnjega izhoda lahko vidite, da imamo v stolpcu "ime" le 5 zapisov za ta znak 'i'.

>> IZBERI * OD osebe, KJER ime KOT KOT '% i%';

Uporaba zdravila Tvsector:

Včasih za hitro iskanje vzorcev ni koristno uporabiti ključne besede LIKE, čeprav je beseda tam. Morda bi razmislili o uporabi standardnih izrazov, in čeprav je to izvedljiva alternativa, so regularni izrazi močni in počasni. Obstoj postopkovnega vektorja za celotne besede v besedilu in njihov besedni opis je veliko učinkovitejši način za reševanje te težave. Koncept popolnega iskanja besedila in podatkovni tip tsvector je bil ustvarjen za odziv nanj. V PostgreSQL obstajata dve metodi, ki počneta točno tisto, kar si želimo:

Primer 01:

Začnimo s preprosto ponazoritvijo ustvarjanja vektorja. Recimo, da želite narediti vektor za vrvico: »Nekateri imajo s pravilno ščetkanjem kodraste rjave lase.". Torej morate napisati funkcijo to_tvsector () skupaj s tem stavkom v oklepajih poizvedbe SELECT, kot je priloženo spodaj. Iz spodnjega izhoda lahko vidite, da bi povzročil vektor sklicev (položaji datotek) za vsak žeton in tudi tam, kjer so izrazi z malo konteksta, na primer članki () in vezniki (in, ali), namerno prezrti.

>> SELECT to_tsvector ('Nekateri imajo s pravilno ščetkanjem kodraste rjave dlake');

Primer 02:

Predpostavimo, da imate dva dokumenta z nekaj podatki v obeh. Za shranjevanje teh podatkov bomo zdaj uporabili pravi primer ustvarjanja žetonov. Predpostavimo, da ste ustvarili tabelo 'Podatki' v svoji bazi podatkov 'test' z nekaj stolpci v njej z uporabo spodnje poizvedbe CREATE TABLE. Ne pozabite v njem ustvariti stolpca tipa TVSECTOR z imenom 'žeton'. Iz spodnjega izhoda si lahko ogledate tabelo, ki je bila ustvarjena.

>> USTVARI PODATKE (Id SERIJSKI PRIMARNI KLJUČ, BESEDILO z informacijami, žeton TSVECTOR);

Zdaj se moramo obrniti na to, da v tej tabeli dodamo celotne podatke obeh dokumentov. Zato poskusite spodnji ukaz INSERT v lupini ukazne vrstice, da to storite. Na koncu so bili zapisi iz obeh dokumentov uspešno dodani v tabelo 'Podatki'.

>> VSTAVITE V VREDNOSTI podatkov (informacij) ('Dve napaki nikoli ne moreta popraviti ene.'), (' On je tisti, ki lahko igra nogomet.'), (' Ali lahko igram vlogo pri tem?'), (' Bolečine v človeku ni mogoče razumeti '), (' V svoje življenje prinesite breskev);

Zdaj morate kolonizirati stolpec obeh dokumentov z njihovim določenim vektorjem. Preprosta poizvedba UPDATE bo za vsako datoteko zapolnila stolpec žetonov z ustreznim vektorjem. Torej morate v ukazni lupini izvesti spodnjo poizvedbo. Rezultat kaže, da je bila posodobitev končno izvedena.

>> UPDATE Data f1 SET token = to_tsvector (f1.info) IZ podatkov f2;

Zdaj, ko imamo vse na mestu, se s skeniranjem vrnimo na našo ponazoritev »lahko ena«. Kot prej rečeno, da to_tsquery z operaterjem AND ne razlikuje med lokacijami datotek v datotekah, kot je razvidno iz spodaj navedenega izhoda.

>> SELECT ID, info FROM Data WHERE žeton @@ to_tsquery ('can & one');

Primer 04:

Da bi našli besede, ki so "zraven", bomo poskusili isto poizvedbo z<->'operater. Sprememba je prikazana v spodnjem izhodu.

>> SELECT ID, info FROM Data WHERE žeton @@ to_tsquery ('can <-> ena ');

Tu je primer nobene neposredne besede poleg druge.

>> SELECT ID, info FROM Data WHERE žeton @@ to_tsquery ('one <-> bolečina ');

Primer 05:

Besede, ki se ne nahajajo tik ob drugi, bomo našli s pomočjo številke v operatorju razdalje za sklicevanje na razdaljo. Blizina med »prinesi« in »življenje« je od prikazane slike oddaljena samo 4 besede.

>> SELECT * FROM Data WHERE žeton @@ to_tsquery ('prinesi <4> življenje ');

Za preverjanje bližine med besedami za skoraj 5 besed je priloženo spodaj.

>> SELECT * FROM Data WHERE žeton @@ to_tsquery ('narobe <5> prav');

Zaključek:

Na koncu ste naredili vse preproste in zapletene primere iskanja po celotnem besedilu z uporabo operatorjev in funkcij To_tvsector in to_tsquery.

Kako uporabljati AutoKey za avtomatizacijo iger Linux
AutoKey je namizni pripomoček za avtomatizacijo za Linux in X11, programiran v Python 3, GTK in Qt. Z njegovo funkcijo skriptiranja in MACRO lahko avt...
Kako prikazati števec FPS v igrah Linux
Linux gaming je dobil velik zagon, ko je Valve leta 2012 napovedal podporo Linuxu za odjemalca Steam in njihove igre. Od takrat se je veliko AAA in in...
Kako prenesti in igrati Sid Meier's Civilization VI v Linuxu
Uvod v igro Civilization 6 je sodoben pogled na klasični koncept, uveden v seriji iger Age of Empires. Ideja je bila dokaj preprosta; začeli bi v zelo...