[voikko-devel] Joukahainen on otettu käyttöön

Harri Pitkänen hatapitk at cc.jyu.fi
Sat Oct 14 11:29:02 EEST 2006


On Saturday 14 October 2006 02:22, Reijo Tomperi wrote:
> Harri Pitkänen wrote:
> > Kyllä tuo haku pitäisi saada toimimaan niin, että isot ja pienet
> > kirjaimet eivät ole merkitseviä. En vain vielä ole keksinyt, mikä on
> > paras tapa hoitaa asia. PostgreSQL:ssä ei ole operaattoria, joka sallisi
> > kirjaintasosta riippumattoman merkkijonovertailun SQL-standardin
> > säännöllisillä lausekkeilla tai edes kirjaintasosta riippumatonta
> > yhtäsuuruusvertailuoperaattoria. Eli olisi turvauduttava vertailuun
> > lower(mjono1) = lower(mjono2)
> >
> > Onko tämä tosiaan ainoa vaihtoehto, vai löytyykö parempia ratkaisuja?
>
> Siis emmekö voi käyttää ILIKE-avainsanaa?
>
> "The keyword ILIKE can be used instead of LIKE to make the match case
> insensitive according to the active locale. This is not in the SQL
> standard but is a PostgreSQL extension."
> http://www.postgresql.org/docs/7.3/static/functions-matching.html

LIKE ja ILIKE ovat huonoja siinä mielessä, että ne ovat liian yksinkertaisia. 
Niillä ei esimerkiksi voi esittää ehtoa, että sanan on päätyttävä vokaaliin. 
Tällaisen ominaisuuden menettäminen olisi ikävää ottaen huomioon mitä tällä 
sovelluksella on tarkoitus tehdä.

Oikeastaan ainoa varteenotettava vaihtoehto olisi operaattori ~* joka testaa 
posix-standardin säännöllisiä lausekkeita kirjaintasosta välittämättä. Emme 
varsinaisesti menettäisi ominaisuuksia, mutta ne jotka ovat tottuneet 
käyttämään SQL:n % ja _ -merkkejä hakulausekkeissa saattaisivat yllättyä. 
Tämä ehkä ei olisi kovinkaan vakava asia.

Nyt käytössä on SIMILAR TO -operaattori, joka testaa SQL-standardin 
säännöllisiä lausekkeita. Ne ovat siinä mielessä mukavia, että sekä % ja _ 
että hyödyllisimmät posix-lisäominaisuudet toimivat, jolloin suurella 
todennäköisyydellä haku onnistuu vaikka hakija ei tietäisikään täsmälleen 
mitä tuo SQL-standardin säännöllinen lauseke tarkoittaa.

Itse olen kallistumassa säännöllisissä lausekkeissa operaattorin ~* käyttöön, 
kuitenkin sellaisella lisämausteella, että asetetaan
V := [aeiouyäö]
C := [bcdfghjklmnpqrstvwxzšž]
A := [aä]
O := [oö]
U := [uy]
_ := .
% := .*

Tällöin siis isoilla kirjaimilla on erikoismerkitys, ja tavalliset haut 
tehdään pieniä kirjaimia käyttäen. Jos halutaan tehdä haku jossa 
kirjaintasolla on merkitystä, pitää käyttää "tavallista" hakua, ei 
säännöllisiä lausekkeita. SQL-merkit _ ja % toimisivat edelleen, ja lisäksi 
hauissa pystyisi käyttämään näitä kielitieteilijöiden suosimia 
lyhennemerkkejä.

Olisiko tämä kaikkien kannalta paras ratkaisu? Tietysti tätä varten pitää jo 
kirjoittaa ohje, muuten kukaan ei voi tietää miten nuo haut toimivat.

Harri



More information about the devel mailing list