[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