PostgreSQL

Eksempler på PostgreSQL-fulltekstsøk

Eksempler på PostgreSQL-fulltekstsøk
Enhver database skal ha en effektiv og allsidig søkefunksjon. Når det refererer til databaser, er PostgreSQL en mester i alt håndverk. Den kombinerer alt du har blitt glad i med SQL med en rekke databasefunksjoner som ikke er SQL. Noen av disse ikke-SQL-funksjonene, for eksempel informasjonssorteringen JSONB, er fantastiske, og du trenger ikke engang å prøve en annen database. Fulltektssøk er blant de nyeste ikke-SQL-funksjonene som er innlemmet i PostgreSQL. Er PostgreSQLs fulltekstsøk helt funksjonelt, eller ønsker du en tydelig søkeindeks? Hvis du på en eller annen måte kan utvikle et komplett tekstsøk som er fratatt å legge til ett kodedeksel til, vil det være en fantastisk idé. Du er allerede kjent med mønstersøk i MySQL-databasen. Så la oss ta en titt på dem først. Åpne PostgreSQL kommandolinjeskall i datasystemet ditt. Skriv servertittel, databasenavn, portnummer, brukernavn og passord for den spesifikke brukeren enn standardalternativene. Hvis du trenger å slo med standardhensyn, la alle valg være tomme og trykk Enter hvert alternativ. For øyeblikket er kommandolinjeskallet ditt utstyrt til å jobbe med.

For å forstå konseptet med fulltekstsøk, må du huske kunnskap om mønstersøk via LIKE-nøkkelordet. 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 tegnet 'jeg' i noen av verdiene. Prøv SELECT-spørringen nedenfor mens du bruker LIKE-setningen i kommandoskallet. Fra utdataene nedenfor kan du se at vi bare har 5 poster for akkurat dette tegnet 'i' i kolonnen 'navn'.

>> VELG * FRA personen HVOR navnet LIKE '% i%';

Bruk av Tvsector:

Noen ganger nytter det ikke å bruke LIKE Keyword for å gjøre et raskt mønstersøk, selv om ordet er der. Kanskje du vurderer å bruke standarduttrykk, og selv om dette er et gjennomførbart alternativ, er vanlige uttrykk både sterke og svake. Å ha en prosessuell vektor for hele ord i en tekst, en språklig beskrivelse av disse ordene, er en mye mer effektiv måte å løse dette problemet på. Konseptet med komplett tekstsøk og datatypen tsvector ble opprettet for å svare på det. Det er to metoder i PostgreSQL som gjør akkurat det vi vil:

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 et SELECT-spørsmål som vedlagt nedenfor. Fra utdataene nedenfor kan du se at det ville gi en referansevektor (filposisjoner) for hvert token, og også der ord med liten kontekst, som artikler () og konjunktjoner (og, eller), bevisst blir ignorert.

>> 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 tokens. Anta at du har opprettet en tabell 'Data' i databasen 'test' med noen kolonner i den ved å lage CREATE TABLE-spørringen nedenfor. Ikke glem å lage en TVSECTOR-kolonne med navnet 'token' i den. Fra utdataene nedenfor kan du se på tabellen som er opprettet.

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

Nå viser det seg at vi legger til de samlede dataene for begge dokumentene i denne tabellen. Så prøv INSERT-kommandoen nedenfor i kommandolinjeskallet for å gjøre det. Til slutt har postene fra begge dokumentene blitt lagt til i tabellen 'Data'.

>> INSERT INTO Data (info) VERDIER ('To feil kan aldri gjøre en riktig.'), (' Han er den som kan spille fotball.'), (' Kan jeg spille en rolle i dette?'), (' Smerten inni en kan ikke forstås '), (' Bring fersken i livet ditt);

Nå må du kolonisere token-kolonnen til begge dokumentene med deres spesifikke vektor. Til slutt vil et enkelt UPDATE-spørsmål fylle tokens-kolonnen med deres tilsvarende vektor for hver fil. Så du må utføre den angitte spørringen nedenfor i kommandoskallet for å gjøre det. Resultatet viser at oppdateringen endelig er gjort.

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

Nå som vi har alt på plass, la oss gå tilbake til illustrasjonen vår av "kan man" med en skanning. To_tsquery with AND operator, som tidligere sagt, gjør ingen forskjell mellom filens plasseringer i filene som vist fra utdataene som er angitt nedenfor.

>> SELECT Id, info FROM Data WHERE token @@ to_tsquery ('can & one');

Eksempel 04:

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

>> VELG Id, info FRA Data WHERE token @@ to_tsquery ('kan <-> en');

Her er et eksempel på ingen umiddelbare ord ved siden av en annen.

>> SELECT Id, info FROM Data WHERE token @@ to_tsquery ('one <-> smerte');

Eksempel 05:

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

>> VELG * FRA data WHERE token @@ to_tsquery ('bring <4> liv');

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

>> VELG * FRA data WHERE token @@ to_tsquery ('feil <5> Ikke sant');

Konklusjon:

Til slutt har du gjort alle de enkle og kompliserte eksemplene på fulltekstsøk ved hjelp av To_tvsector og to_tsquery operatorer og funksjoner.

Åpne kildeporter for kommersielle spillmotorer
Gratis, åpen kildekode og plattformspillmotorrekreasjoner kan brukes til å spille gamle så vel som noen av de ganske nylige spilletitlene. Denne artik...
Beste kommandolinjespill for Linux
Kommandolinjen er ikke bare din største allierte når du bruker Linux, den kan også være kilden til underholdning fordi du kan bruke den til å spille m...
Beste Gamepad Mapping Apps for Linux
Hvis du liker å spille spill på Linux med en gamepad i stedet for et vanlig tastatur- og musinngangssystem, er det noen nyttige apper for deg. Mange P...