Forum » Programiranje » SQL iskanje po bazi
SQL iskanje po bazi
papasmrk ::
Pozdravljeni,
za nalogo sem dobil, da moram naredit iskalnik po bazi, kjer se bo iskanje vršilo po polju "dokumentacija" in to polje ima lahko tudi do 2000 znakov.
Torej, če bo uporabnik v iskalnik vnesel niz npr. 'podatkovna baza' mora ta funkcija za iskanje vrniti tudi rezultate, kjer se v opisu nahaja ta iskalna fraza v različnih sklonih.
To se pravi, da v primeru iskane fraze 'podatkovna baza' mora funkcija poiskati tudi zapise, ki vsebujejo 'podatkovni bazi','podatkovno bazo','podatkovne baze',...
Ima kdo idejo kako to narediti elegantno ?
hvala in lep pozdrav
za nalogo sem dobil, da moram naredit iskalnik po bazi, kjer se bo iskanje vršilo po polju "dokumentacija" in to polje ima lahko tudi do 2000 znakov.
Torej, če bo uporabnik v iskalnik vnesel niz npr. 'podatkovna baza' mora ta funkcija za iskanje vrniti tudi rezultate, kjer se v opisu nahaja ta iskalna fraza v različnih sklonih.
To se pravi, da v primeru iskane fraze 'podatkovna baza' mora funkcija poiskati tudi zapise, ki vsebujejo 'podatkovni bazi','podatkovno bazo','podatkovne baze',...
Ima kdo idejo kako to narediti elegantno ?
hvala in lep pozdrav
Za komentiranje se moraš prijaviti
GupeM ::
To pa ne bo šlo elegantno. Razen s še eno bazo, ki bi vsebovala sklone vseh besed v slovenščini. Najbližje lahko prideš z regexom oz LIKE operatorjem. Split besed po presledku, zadnjo črko ali dve v vsaki besedi izbrišeš, nato pa novo dobljeno besedo primerjaš z regexom, kjer je zadnjih n črk lahko poljubnih, vendar ne več kot x. Pseudo dummy primer:
Ni najbolje, vendar brez "slovarja" je v slovenščini to enostavno nemogoče. Zakaj je nemogoče? Zato, ker recimo beseda "jaz" v drugih sklonih nima več niti približno enake oblike: Jaz, me/mene, mi/meni, me/mene, o meni, z mano/menoj.
"Koda," ki sem jo napisal zgoraj, ti tako ne bo vrnila vseh besed pravih, lahko pa ti vrne tudi kakšno napačno besedo. Poleg tega je potrebno še preverjati velike/male črke.
Če pa je predpostavljeno, da se vedno menja le zadnja črka in je vedno enako črk (podatkovna baza je tak primer), pa je zadeva veliko bolj preprosta. Vse črke pred presledkom ali ločilom in zadnjo črko v stringu zamenjaš s počrtajem '_' in vse skupaj vržeš v LIKE operator.
iskan_niz = 'podatkovna baza'; array_besed = split(iskan_niz, ' '); koncni_niz; for beseda in array_besed loop: beseda = substring(beseda, lenght(beseda)-2); beseda = beseda + '[a-z]{0,3}'; koncni_niz += koncni_niz + beseda + ' '; end loop; koncni_niz = substring(koncni_niz, length(koncni_niz)-1); --odstani presledek na koncu select t.dokumentacija from tabela t where regexp_match(t.dokumentacija, koncni_niz);
Ni najbolje, vendar brez "slovarja" je v slovenščini to enostavno nemogoče. Zakaj je nemogoče? Zato, ker recimo beseda "jaz" v drugih sklonih nima več niti približno enake oblike: Jaz, me/mene, mi/meni, me/mene, o meni, z mano/menoj.
"Koda," ki sem jo napisal zgoraj, ti tako ne bo vrnila vseh besed pravih, lahko pa ti vrne tudi kakšno napačno besedo. Poleg tega je potrebno še preverjati velike/male črke.
Če pa je predpostavljeno, da se vedno menja le zadnja črka in je vedno enako črk (podatkovna baza je tak primer), pa je zadeva veliko bolj preprosta. Vse črke pred presledkom ali ločilom in zadnjo črko v stringu zamenjaš s počrtajem '_' in vse skupaj vržeš v LIKE operator.
SELECT t.dokumentacija FROM tabela t WHERE t.dokumentacija LIKE '%podatkovn_ baz_%';
Zgodovina sprememb…
- spremenil: GupeM ()
Heavy ::
Iskano besedo daš na najmanjši skupni imenovalec.
hiša
hiše
hiši
Odstraniš zadnjo črko iz niza. Če imaš dve besedi podatkovne baze, daš to v ločena niza in obema odstraniš zadnjo črko.
Če se niz začne z o/s/z in presledkom to vreš ven in iščeš koren besede na prej napisan način
o hiši
Naprej pa LIKE '%____%', to bi delalo za hišo, problem nastane pri podatkovni bazi. Drugi problem so nepravilni skloni. Človek, ljudje. Še vedno bi za nepravilne sklone rabil slovar.
hiša
hiše
hiši
Odstraniš zadnjo črko iz niza. Če imaš dve besedi podatkovne baze, daš to v ločena niza in obema odstraniš zadnjo črko.
Če se niz začne z o/s/z in presledkom to vreš ven in iščeš koren besede na prej napisan način
o hiši
Naprej pa LIKE '%____%', to bi delalo za hišo, problem nastane pri podatkovni bazi. Drugi problem so nepravilni skloni. Človek, ljudje. Še vedno bi za nepravilne sklone rabil slovar.
#TeamFelix
papasmrk ::
Hvala za nasvete... očitno bo potrebno malce "telovadbe", da pokrijem vsaj nek del možnih sklonov besednih zvez.
Za komentiranje se moraš prijaviti
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | python in postgresql (strani: 1 2 )Oddelek: Programiranje | 7530 (6431) | ZaphodBB |
» | Regular expressionOddelek: Programiranje | 1908 (1335) | TESKAn |
» | [C++]Izpiši Zadnjo Črko v StavkuOddelek: Programiranje | 1002 (785) | Twix |
» | [JavaScript] Sortiranje šumnikovOddelek: Programiranje | 2153 (1887) | MarkookraM |