PostgreSql Fuzzy Search

PostgreSql Fuzzy Search
Et uklar ord fører til delvis eller uklart. Dette søket omhandler resultatet som ikke ser det nøyaktige eller perfekte søket. Det uklare søket etter data i PostgreSQL inneholder forskjellige tilnærminger. Enten gjennom utvidelser eller algoritmer. Men fenomenet brukes på begge måter. Denne artikkelen vil inneholde alle mulige metoder for å demonstrere arbeid og implementering av uklar søk i PostgreSQL -data.

Implementering av det uklare søket

For å forstå begrepet uklar søk, må vi lage en tabell. Her opprettes en tabell som heter maler med kolonnene i ID, navn, nasjonalitet, kjønn og fødsels_år. Hver kolonne inneholder henholdsvis datatyper:

>> Lag tabellmaler (id int, navn varchar, nasjonalitet varchar, kjønn varchar, fødsels_år int);

Etter at tabellen er opprettet, er det på tide å passere data i radene i forholdet for å gjøre det i funksjonell tilstand. En innsatserklæring brukes til å legge til verdiene i tabellen:

>> Sett inn maler (id, navn, nasjonalitet, kjønn, fødsels_år) verdier (1, 'John', 'American', 'Mann', '2002'), (2, 'Robert', 'British', 'Mann ',' 1990 '), (3,' Rosee ',' American ',' kvinnelig ',' 2000 '), (4,' Shomia ',' tysk ',' kvinne, '1982');

Alle dataene vil bli lagt inn som vist gjennom meldingen om at 4 rader er lagt inn i tabellen.

De angitte dataene kan sees gjennom SELECT -setningen som brukes til å hente alle radene og kolonnene i en relevant tabell:

>> Velg * fra maler;

Alle dataene er vist. Som du vet, er det uklare søket det som forårsaker den delvise kampen og bringer resultatet som er det nærmeste. Så vi vil prøve hvert eksempel på uklar søk.

Eksempel 1: Søker gjennom jokertegnfilter

I dette eksemplet vil vi hente posten fra tabellen ved å bruke en betingelse på navnekolonnen. Enhver kolonne kan påvirkes av det uklare søket. Denne situasjonen kan oppstå når du vet starten av navnet, men du er ikke sikker på avslutningen, så vi bruker denne operatøren '%' på slutten av navnet. Dette kalles et jokertegnfilter. Dette symbolet kan være for enhver karakter. Så vi vil filtrere resultatene som navnet skal starte med 'Rob'. Spørringen inneholder SELECT -setningen for å hente den matchende navnraden. Primært mens vi bruker noen betingelser etter hvor leddet, bruker vi et like stort symbol '='. Men ettersom vi ikke er sikre på resultatene, vil vi bruke 'som' i stedet for det '=' symbol:

>> Velg * fra maler der navn som 'Rob%';

Den resulterende verdien viser at en enkelt rad oppnås. Som stemmer overens med navnet. Tilsvarende vil vi bruke '%' operatøren i begge ender. Slik at filteret vil søke etter malerens navn, hvis navn kan begynne eller avslutte med en hvilken som helst kombinasjon av karakterene:

>> Velg * fra maler der navn som '%h%';

Denne kommandoen har to rader som har alfabetet 'H' i sentrum. På denne måten kan du se at den fuzzy String Matching fungerer i PostgreSQL.

Eksempel 2:

Ved å bruke det samme konseptet, hvis ordet vi brukte som input 'ro', 'b', fjernes, vil du se at disse radene vil bli hentet hvis navn starter med RO:

>> Velg * fra maler der navn som 'ro%';

Derfor kan du se at to rader er valgt. For å filtrere resultatene igjen, kan vi bruke denne operatøren på to måter ved å bruke den i to kolonner. For eksempel vil navnet som starter med det samme ordet 'ro%' bli søkt, men nasjonalitetskolonnen vil bli brukt med radens filter som starter med nasjonalitetsnavnet 'A%'.

>> velg * fra maler der navn som 'ro%' og nasjonalitet som 'a%';

Dermed vil en enkelt rad bli valgt i henhold til tilstanden.

Eksempel 3: Søker ved å bruke trigrammer

PostgreSQL har en nyttig utvidelse som brukes til å aktivere PG_TRGM -utvidelsen. Denne utvidelsen brukes til å bringe noen funksjoner i Fuzzy String Search. Trigramene dannes når en streng er delt inn i en gruppe på tre bokstaver etter hverandre. Først må vi installere utvidelsen i PostgreSQL. For uten å aktivere utvidelsen, kan vi ikke bruke uklar søk på forskjellige måter:

>> Opprett utvidelse PG_TRGM;

En utvidelse legges til databasen. Nå vil vi bruke noen kommandoer som brukes i henhold til de installerte utvidelsene. I denne typen søk bruker vi nøkkelordet 'likhet' for å søke etter den nærmeste mulige kampen ved å gi sannsynligheten for område som viser hvor like strengene er på skalaen mellom 0 og 1. I det følgende eksempelet vil vi søke fra tabellen ved å bruke en hvor klausulen har likhet som 'Johr', så det fjerde brevet i ordet blir endret. Søket vil være i henhold til de feilaktig brevene:

>> Velg * fra maler der likhet (navn, 'Johr')> 0.4;

Resultatet vil inneholde raden med kolonnenavnet som ligner på John som er John i tabellen.

Nå vil vi bruke likhetskonseptet til nasjonalitetskolonnen i radene som inneholder 'en' i strengen som er til stede i PostgreSQL -dataene. Resultatet vil være begrenset til de to radene:

>> velg * fra malerrekkefølge etter likhet (nasjonalitet, 'an') grense 2;

Resultatet vil bare inneholde to rader, da vi har brukt grensen. Så de radene som har nasjonaliteten med å inneholde 'en' i dem, vises.

Eksempel 4: Søker gjennom fonetiske algoritmer

En annen måte å søke på er gjennom å bruke fonetiske algoritmer. Disse algoritmene bruker reglene som brukes til å representere en streng ved å bruke en kortkode. For dette formålet bruker PostgreSQL en utvidelse som skal installeres slik at vi kan aktivere arbeidet med søket. Denne utvidelsen er en uklar strengmatcher:

>> Opprett forlengelsesfuzzystrMatch;

Etter å ha installert utvidelsen, vil vi bruke hvilken som helst funksjon i utvidelsen. For eksempel vil vi bruke en funksjon kjent som metafon.

Metafon: Denne algoritmen brukes til å returnere koden for forskjellige lengder. Dette er som den enkle funksjonen vi bruker i PostgreSQL. Tilsvarende kan vi gi argumenter til denne funksjonen. For eksempel er lengden spesifisert som returnerer verdien til den lengden.

I eksemplet vil vi velge ID, navn og en ny kolonne med navnet Metafon som vil forkorte navnet på maleren for å danne en forkortelse. WHERE -leddet vil inneholde en betingelse for å søke etter nasjonaliteten lik amerikansk:

>> Velg ID, navn, metafon (navn, 10) fra maler der nasjonalitet = 'amerikansk' grense 2;

Du kan se at ved utførelse vil metafonkolonnen inneholde de forkortede formene for malerens navn.

Konklusjon

Denne artikkelen kaster lys til delvis søk på dataene ved å bruke Fuzzy Strings Matching. Hvis brukeren ikke er klar over de komplette navnene eller det delvise navnet, kan han enkelt få informasjonen om posten ved å bruke denne typen søk. Vi har brukt elementære eksempler angående både algoritmer og utvidelser i PostgreSQL. Vi håper du fant denne artikkelen nyttig. Sjekk ut andre Linux -hint -artikler for flere tips og informasjon.