Delprosjekt: Søking
- Ansvarlig:
- Arne Vonheim (arne.vonheim@hiof.no)
- Innledning:
- Da vi overtok prosjektet var søkingen basert på Glimpse.
Glimpse er et kommandolinje søkeverktøy som baserer seg
på forhåndsbygde indeks filer. Som web-grensesnitt ble perl
scriptet GlimpseHTTP benyttet. Det er et cgi script som er skrevet spesiellt for Glimpse
å være et grensesnitt mot Glimpse.
Det som var problemet med dette oppsettet var:
- Søkeresultatene inneholdt mye støy. For eksempel så
dukket det opp halve HTML tagger i beskrivelsen av linkene. Ved siden av
å se rotete ut kunne det også gi direkte feil svar hvis søkestrengen
kun fantes inne i tagger.
- Det var ikke muligheter for å benytte Glimpse sin feiltoleranse
i søkene. Dette var spesiellt interessant i forbindelse med arabiske
ord, som ikke har noen uniform stavemåte med det latinske alfabet.
Eksempelvis er "hizbullah", "hizballah" og "hizbollah"
samme ord.
- Det var ikke støtte for de boolske operatorerene AND og OR.
- Hva har vi gjort:
- I starten var vi i tvil om vi skulle bygge videre
på GlimpseHTTP eller lage et nytt script fra bunnen. Valget falt
på å utvide GlimpseHTTP, siden det allerede hadde mesteparten
av funksjonaliteten vi trengte. Med dette regnet vi med å spare en
del tid på utviklingen.
Men der tok vi feil. GlimpseHTTP viste seg å være vanskelig å jobbe med siden det tydeligvis var optimalisert for hastighet fremfor lesbarhet.
Halveis ut i prosjektet ble flere av skolens maskiner utsatt for innbruddsforsøk. Disse var delvis basert på et sikkerhetshull
i GlimpseHTTP. Vi bestemte oss da for å gå over til WebGlimpse.
WebGlimpse er ment som etterfølgeren til GlimpseHTTP. Det er skrevet
av samme programmerer og følger omtrent samme programstruktur - og det er en del bedre kommentert.
Installeringen fungerte overraskende bra. Den var enkel, og vi hadde
raskt en fungerende søkeside oppe. Steg for steg
beskrivelser finnes
på WG sin hjemmeside.
For å få indeksfilene på
den store /var partisjonen la vi dem under /var/lib/webglimpse/. Etterpå
laget vi en link fra /home/almash/admin/webglimpse/ for å opprettholde
den normale strukturen.
Siden kode strukturen lignet en del på sin forgjenger, gikk det
relativt smertefritt å konvertere det vi hadde laget for GlimpseHTTP.
- Følgende punkter oppsummerer den nye funksjonaliteten til WebGlimpse:
-
- Boolske operatorer And/Or
WG konverterer nå mellom ordene 'and'/'or' og Glimpse sin egne ';'/',' notasjon.
- Feiltoleranse via en checkbox
Glimpse har mulighet for flere nivåer av feiltoleranse. Med nivåer
menes en feil, to feil, tre feil etc. Vi tenkte at det ikke er så lett å
angi en slik verdi på forhånd når man skal søke
etter noe. Da er det lettere å forholde seg til en av/på variabel
- enten så er man usikker på stavemåten, eller så
er man det ikke. Derfor laget vi en bool_error cgi-variabel. Hvis den
er 'on' så får Glimpse en parameter som tillater to stavefeil.
Et kosmetisk problem er at scriptet normalt uthever søkeordene
med fet skrift, men det klarer ikke å finne igjen ordene som ikke
skrives nøyaktig slik som i søkestrengen.
- Ingen nede tid under re-indeksering
Under re-indeksering avviser WebGlimpse
alle søk. Dette ble et problem siden det tar opptil to timer, og
gjennomføres hvert døgn. Løsningen ble å la
cron jobben kopiere indeks filene over til en annen katalog før
den nye indekseringen startet. Så modifiserte vi søkescriptet til
å se etter filene der i stedet for å gi feilmelding.
- Søkeboks som følger søket.
Ofte når man
søker så finner man ikke ut hva man egentlig burde søkt
etter før etter at man har søkt en gang. Dette ble et av
argumentene for å la søkeformen dukke opp nederst på
siden som WG returnerer. Malen til søkeformen ligger i filen /www/almashriq/htdocs/base/search/search_box.html.
I tillegg til vanlige HTML tagger inneholder den også spesielle "tagger"
som starter med dollar symbol. Disse vil bli erstattet med verdier fra
forrige søk. For eksempel vil $query bli erstattet med søkestrengen,
og $age med maksimum fil alder. Deretter blir formen puttet nederst på
søkeresultatet. Dette vil i praksis bety at de som bruker søkingen
ikke behøver å taste inn alt på nytt, men bare endre
de ønskede feltene.
- fancy_links opsjon
- Target opsjon - rammebasert søk:
Vi innførte en ny opsjon for å la alle linker i søkeresultatet
åpnes i en annen ramme. Denne er nærmere beskrevet i
rammesøk rapporten.
Disse punktene er implementert i filen /cgi-bin/webglimpse_al
- Vedlikehold:
-
For at opsjonene skal følge brukeren fra side til side
Etter navnet på cgi-scriptet (/cgi-bin/webglimpse_al) ligger
stien til indeks filene (/home/almash/admin/webglimpse).
Startsiden til alle søkeformene må inneholde følgende minimumsform:
<form method=get action="/cgi-bin/webglimpse_al/home/almash/admin/webglimpse">
<input name=query>
<input type=submit value=" Search ">
</form>
Søkingen kan i stor grad styres ved hjelp av opsjoner i formen. Her følger en oversikt.
Opsjon/variabel | Forklaring |
query | Selve søkestrengen. |
bool_error | Tillater opptil to feil bokstaver i søkestrengen ved verdien 'on' |
age | Maks alder (i dager) på de returnerte filene. |
fancylinks | Lager fancy overskrifter på filene hvis 'on'. |
case | Ignorer store/små bokstaver hvis 'on'. |
whole | Matcher ord inne i andre ord hvis 'on'. |
maxfiles | Øvre grense for antall filer i resultatet. |
maxlines | Antall linjer med match for hver fil. |
target | Setter inn en ny |
localcopy | Settes alltid til 'n'. Denne er til bruk for speilede sites.
Se webglimpse dokumentasjonen
for mer informasjon. |
Eksempler:
For å tillate to feil uansett, kan man lage en skjult bool_error opsjon:
<input type=hidden name=bool_error value='on'>
Eller en checkbox, hvor brukeren selv kan velge:
<input type=checkbox name=bool_error>
Mal filen
Søkeformen nederst på resultat sidene bygger på en
mal fil.
Denne blir hentet inn for hvert søk og manipuleres av
funksjonen getSearchBox i webglimpse_al.
Manipuleringen består i å bytte ut "representasjons strengene",
med de opsjonene scriptet få inn.
Hvis man endrer en passiv opsjon (hidden) til en interaktiv (checkbox, option-liste etc),
bør man sørge for at funksjonen oversetter disse riktig.
Se funksjonen for eksempler.
- Mulige forbedringer:
-
- En forbedring ville være å den ovenfor nevnte getSearchBox funksjonen til å
analysere mal-filen, og finne ut hvordan den skulle oversette opsjonene
den fikk inn.
- Prosjektfakta
- Lokalisering:
Tidsestimering:
Programvare
|