» »

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 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:

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 ()

strel ::

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.
#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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

python in postgresql (strani: 1 2 )

Oddelek: Programiranje
777530 (6431) ZaphodBB
»

Regular expression

Oddelek: Programiranje
161908 (1335) TESKAn
»

[C++]Izpiši Zadnjo Črko v Stavku

Oddelek: Programiranje
81002 (785) Twix
»

[JavaScript] Sortiranje šumnikov

Oddelek: Programiranje
152153 (1887) MarkookraM

Več podobnih tem