PostgreSQL-eksempler på fulltekst

PostgreSQL-eksempler på fulltekst
Enhver database skal ha en effektiv og allsidig søkefunksjon. Hver gang det refererer til databaser, er PostgreSQL en mester i alt håndverk. Den kombinerer alle tingene du har vokst til å elske med SQL med en rekke ikke-SQL-databasefunksjonaliteter. Noen av disse ikke-SQL-funksjonene, for eksempel JSONB-informasjonssorteringen, er fantastiske, og du trenger ikke engang å prøve en annen database. Fulltekstsøk er blant de nyeste ikke-SQL-funksjonene som er integrert i PostgreSQL. Er PostgreSQLs fullstendige-tekstsøk helt funksjonelt, eller vil du ha en distinkt søkeindeks? Hvis du på en eller annen måte kan utvikle et komplett tekstsøk fratatt å legge til et omslag til kode, ville det være en fantastisk idé. Du er allerede kjent med mønstersøk i MySQL -databasen. Så la oss se på dem først. Åpne PostgreSQL-kommandolinjeskallet i datasystemet ditt. Skriv servertittelen, databasenavn, portnummer, brukernavn og passord for den spesifikke brukeren annet enn standardalternativer. Hvis du trenger å slog med standardhensyn, må du la alle valg tomme og treff Enter hvert alternativ. For øyeblikket er kommandolinjeskallet utstyrt med å jobbe med.

For å forstå konseptet med fulltekstsøk, må du huske mønstersøkkunnskap via lignende nøkkelord. Så la oss anta en tabell 'person' i databasen 'test' med følgende poster i den.

>> velg * fra person;

La oss anta at du vil hente postene til denne tabellen, der kolonnen 'Navn' har et tegn 'i' i noen av dens verdier. Prøv den nedenfor velger spørringen mens du bruker lignende leddet i kommando-skallet. Fra utgangen nedenfor kan du se at vi bare har 5 poster for akkurat denne karakteren 'I' i kolonnen 'Navn'.

>> Velg * fra person der navn som '%i%';

Bruk av TVSector:

Noen ganger er det ingen nytte å bruke lignende nøkkelord for å gjøre et raskt mønstersøk, selv om ordet er der. Kanskje du vil vurdere å bruke standarduttrykk, og selv om dette er et gjennomførbart alternativ, er vanlige uttrykk både sterke og trege. Å ha en prosedyrevektor for hele ord i en tekst, en sproglig beskrivelse av disse ordene, er en mye mer effektiv måte å løse dette problemet. Konseptet med komplett tekstsøk og datatypen TsVector ble opprettet for å svare på den. Det er to metoder i PostgreSQL som gjør akkurat det vi vil:

  • TO_TVSECTOR: Brukes til å lage en liste over symboler (TS -midler for "tekstsøk").
  • To_tsquery: Brukes til å søke i vektoren etter forekomster av spesifikke termer eller uttrykk.

Eksempel 01:

La oss starte med en enkel illustrasjon av å lage en vektor. Anta at du vil lage en vektor for strengen: “Noen mennesker har krøllete brunt hår gjennom riktig børsting.”. Så du må skrive en TO_TVSECTOR () -funksjon sammen med denne setningen i parentesene til en valgt spørring som vedlagt nedenfor. Fra utgangen nedenfor kan du se at den vil gi en vektor av referanser (filposisjoner) for hvert symbol, og også der begreper med liten kontekst, som artikler () og konjunksjoner (og, eller), blir bevisst ignorert ignorert ignorert bevisst.

>> Velg to_tsvector ('Noen mennesker har krøllete brune hår gjennom riktig børsting');

Eksempel 02:

Anta at du har to dokumenter med noen data i begge. For å lagre disse dataene, vil vi nå bruke et reelt eksempel på å generere symboler. Anta at du har opprettet en tabell 'Data' i databasen din 'Test' med noen kolonner i den ved å bruke den nedenfor Opprett tabell -spørringen. Ikke glem å lage en kolonne av TVSector -typen som heter 'Token' i den. Fra utgangen nedenfor kan du se på tabellen som er opprettet.

>> Opprett tabelldata (ID Serial Primary Key, Info Text, Token TsVector);

Nå vender det oss for å legge til de overordnede dataene fra begge dokumentene i denne tabellen. Så prøv nedenfor Sett inn kommandoen i kommandolinjeskallet ditt for å gjøre det. Endelig har postene fra begge dokumentene blitt lagt inn i tabellen 'Data'.

>> Sett inn data (info) verdier ('To feil kan aldri gjøre en riktig.'), (' Det er han som kan spille fotball.'), (' Kan jeg spille en rolle i dette?'), (' Smertene inne i en kan ikke forstås '), (' bringe fersken i livet ditt);

Nå må du kolonisere token -kolonnen til begge dokumentene med deres spesifikke vektor. Til syvende og sist vil en enkel oppdateringsspørsmål fylle Tokens -kolonnen med deres tilsvarende vektor for hver fil. Så du må utføre den angitte spørringen nedenfor i kommando-skallet for å gjøre det. Utgangen viser at oppdateringen endelig er gjort.

>> Oppdater data F1 Set Token = To_TSvektor (F1.info) fra data f2;

Nå som vi har alt på plass, la oss komme tilbake til vår illustrasjon av "kan en" med en skanning. Til TO_TSQUERY med og operatør, som tidligere sagt, ikke gjør noen forskjell mellom filenes lokasjoner i filene som vist fra utdata som er angitt nedenfor.

>> Velg ID, info fra data der token @@ to_tsquery ('kan & en');

Eksempel 04:

For å finne ord som er "ved siden av" hverandre, vil vi prøve den samme spørringen med '' -operatøren. Endringen vises i utgangen nedenfor.

>> Velg ID, info fra data der token @@ to_tsquery ('kan en');

Her er et eksempel uten øyeblikkelig ord ved siden av et annet.

>> Velg ID, info fra data der token @@ to_tsquery ('én smerte');

Eksempel 05:

Vi finner ordene som ikke er umiddelbart ved siden av hverandre ved å bruke et tall i avstandsoperatøren for å referere avstand. Nærheten mellom 'bringe' og 'livet er 4 ord bortsett fra det viste bildet.

>> Velg * fra data der token @@ to_tsquery ('Bring Life');

For å sjekke nærheten mellom ordene for nesten 5 ord er vedlagt nedenfor.

>> Velg * fra data der token @@ to_tsquery ('feil rett');

Konklusjon:

Til slutt har du gjort alle de enkle og kompliserte eksemplene på fulltekstsøk ved bruk av TO_TVSECTOR og TO_TSQUERY Operatører og funksjoner.