PostgreSQL

Piemēri PostgreSQL pilna teksta meklēšanai

Piemēri PostgreSQL pilna teksta meklēšanai
Jebkurai datu bāzei jābūt efektīvai un daudzpusīgai meklēšanas iespējai. Ikreiz, kad tas attiecas uz datu bāzēm, PostgreSQL ir visu amatu meistars. Tas apvieno visas lietas, kuras esat iemīļojis ar SQL, un virkni ne-SQL datu bāzes funkciju. Jebkura no šīm ne-SQL funkcijām, piemēram, JSONB informācijas kārtošana, ir fantastiska, un jums pat nevajadzētu izmēģināt citu datu bāzi. Pilna teksta meklēšana ir viena no jaunākajām ne-SQL funkcijām, kas iekļautas PostgreSQL. Vai PostgreSQL pilnteksta meklēšana ir pilnīgi funkcionāla, vai arī vēlaties atsevišķu meklēšanas indeksu? Ja jūs kaut kādā veidā varat izveidot pilnīgu teksta meklēšanu, kurai nav pievienots vēl viens koda vāks, tā būtu fantastiska ideja. Jūs jau esat iepazinies ar modeļu meklēšanu MySQL datu bāzē. Tātad, vispirms apskatīsim tos. Atveriet PostgreSQL komandrindas apvalku savā datorsistēmā. Uzrakstiet servera nosaukumu, datu bāzes nosaukumu, porta numuru, lietotājvārdu un paroli konkrētam lietotājam, izņemot noklusējuma opcijas. Ja jums ir nepieciešams slogot ar noklusējuma apsvērumiem, atstājiet visas izvēles tukšas un nospiediet Enter katra opcija. Pašlaik jūsu komandrindas apvalks ir aprīkots, lai strādātu.

Lai saprastu pilna teksta meklēšanas jēdzienu, jums ir jāatceras modeļa meklēšanas zināšanas, izmantojot LIKE atslēgvārdu. Pieņemsim, ka datu bāzē “tests” ir tabula “persona” ar šādiem ierakstiem.

>> SELECT * NO personas;

Pieņemsim, ka vēlaties ielādēt šīs tabulas ierakstus, kur slejas “name” jebkurā rakstā ir raksturs “i”. Izmēģiniet zemāk redzamo SELECT vaicājumu, vienlaikus lietojot klauzulu LIKE komandu čaulā. No izejas zemāk redzams, ka kolonnā “nosaukums” mums ir tikai 5 ieraksti par šo konkrēto rakstzīmi “i”.

>> ATLASĪT * no personas, kur vārds LIKE '% i%';

Tvsector izmantošana:

Dažreiz nav lietderīgi izmantot atslēgvārdu LIKE, lai veiktu ātru rakstu meklēšanu, lai gan vārds tur ir. Varbūt jūs apsverat iespēju izmantot standarta izteiksmes, un, lai gan šī ir iespējama alternatīva, regulārās izteiksmes ir gan spēcīgas, gan gausas. Daudz efektīvāks veids, kā risināt šo problēmu, ir procesuāls vektors veseliem vārdiem tekstā. Lai atbildētu uz to, tika izveidota pilnīgas teksta meklēšanas koncepcija un datu tips tsvector. PostgreSQL ir divas metodes, kas dara tieši to, ko mēs vēlamies:

01. piemērs:

Sāksim ar vienkāršu vektora izveides ilustrāciju. Pieņemsim, ka vēlaties izveidot virknes vektoru: “Dažiem cilvēkiem, pareizi sukojot, ir cirtaini brūni mati.”. Tāpēc jums ir jāraksta funkcija to_tvsector () kopā ar šo teikumu SELECT vaicājuma iekavās, kā pievienots zemāk. No zemāk redzamās izejas var redzēt, ka katram marķierim varētu būt atsauces (faila pozīcijas) vektors, kā arī apzināti ignorēti termini ar nelielu kontekstu, piemēram, raksti (the) un savienojumi (un, vai).

>> SELECT to_tsvector ('Dažiem cilvēkiem pareizi cirstot ir cirtaini brūni matiņi');

02. piemērs:

Pieņemsim, ka jums ir divi dokumenti, kuros ir daži dati. Lai saglabātu šos datus, tagad mēs izmantosim reālu marķieru ģenerēšanas piemēru. Pieņemsim, ka esat izveidojis tabulu “Dati” datu bāzes “testā” ar dažām kolonnām, izmantojot zemāk esošo vaicājumu CREATE TABLE. Neaizmirstiet tajā izveidot TVSECTOR tipa kolonnu ar nosaukumu 'token'. Zemāk redzamajā izvadā varat apskatīt izveidoto tabulu.

>> CREATE TABLE Data (Id SERIAL PRIMARY KEY, info TEXT, token TSVECTOR);

Tagad mums jāpievieno abu tabulas dokumentu kopējie dati. Lai to izdarītu, izmēģiniet komandu INSERT komandrindas čaulā. Visbeidzot, abu dokumentu ieraksti ir veiksmīgi pievienoti tabulā “Dati”.

>> INSERT INTO Data (info) VĒRTĪBAS ('Divas nepareizas lietas nekad nevar izlabot.'), (' Viņš ir tas, kurš var spēlēt futbolu.'), (' Vai es varu tajā piedalīties??'), (' Sāpes cilvēka iekšienē nav saprotamas '), (' Ievietojiet persiku savā dzīvē);

Tagad jums ir jākolonizē abu dokumentu marķieru kolonna ar konkrēto vektoru. Galu galā vienkāršs UPDATE vaicājums aizpildīs marķieru kolonnu ar atbilstošo vektoru katram failam. Tātad, lai to izdarītu, komandas čaulā ir jāizpilda zemāk norādītais vaicājums. Rezultāts parāda, ka atjauninājums ir beidzot veikts.

>> UPDATE Data f1 SET marķieris = to_tsvector (f1.info) NO DATI f2;

Tagad, kad mums tas viss ir vietā, atgriezīsimies pie mūsu skenēšanas ilustrācijas “var viens”. To_tsquery ar operatoru AND, kā jau iepriekš teikts, nav atšķirības starp failu atrašanās vietām failos, kā parādīts zemāk norādītajā izvadē.

>> SELECT ID, info FROM Data WHERE marķieris @@ to_tsquery ('var & viens');

4. piemērs:

Lai atrastu vārdus, kas atrodas “blakus”, mēs izmēģināsim to pašu vaicājumu ar “<->'operators. Izmaiņas tiek parādītas izejā zemāk.

>> SELECT ID, info FROM Data WHERE marķieris @@ to_tsquery ('var <-> viens ');

Šeit ir piemērs, kad blakus vārdam nav tūlītēju vārdu.

>> SELECT ID, info FROM Data WHERE marķieris @@ to_tsquery ('viens <-> sāpes ');

05. piemērs:

Mēs atradīsim vārdus, kas nav uzreiz blakus, izmantojot attāluma operatora skaitli, lai atsauktu attālumu. Attālums starp “atnest” un “dzīvi” ir 4 vārdi, izņemot attēloto attēlu.

>> SELECT * FROM Data WHERE marķieris @@ to_tsquery ('atvest <4> dzīve ');

Lai pārbaudītu gandrīz 5 vārdu tuvumu starp vārdiem, ir pievienots zemāk.

>> SELECT * FROM Data WHERE marķieris @@ to_tsquery ('nepareizi <5> pa labi');

Secinājums:

Visbeidzot, jūs esat veicis visus vienkāršos un sarežģītos pilna teksta meklēšanas piemērus, izmantojot To_tvsector un to_tsquery operatorus un funkcijas.

Kā mainīt peles un skārienpaliktņu ritināšanas virzienu operētājsistēmā Windows 10
Pele un SkārienpaliktnisTas ne tikai padara skaitļošanu vienkāršu, bet arī efektīvāku un mazāk laikietilpīgu. Mēs nevaram iedomāties dzīvi bez šīm ier...
Kā mainīt peles rādītāja un kursora izmēru, krāsu un shēmu operētājsistēmā Windows 10
Peles rādītājs un kursors operētājsistēmā Windows 10 ir ļoti svarīgi operētājsistēmas aspekti. To var teikt arī par citām operētājsistēmām, tāpēc pati...
Bezmaksas un atvērtā koda spēļu dzinēji Linux spēļu izstrādei
Šis raksts aptvers bezmaksas un atvērtā koda spēļu motoru sarakstu, kurus var izmantot, lai izstrādātu 2D un 3D spēles Linux. Šādu spēļu dzinēju ir da...