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
      For å bedre utnytte katalogenes hierarkiske oppbygning laget vi en opsjon for hva vi kalle "fancy linker". Fancy linker betyr at alle linkene som WG returnerer blir delt opp i en link for hver katalog, og en for selve dokumentet. Alle Dewey kataloger blir oversatt til kategoriens navn. Dokumentet bruker tittelen hvis det har, ellers filnavnet. For å forsterke hva som er hoved linken skrives dokumentet med større skrift og etterfølges av Apaches ikon for tekst.

      Dewey mappingen blir gjort med tekstfilen /home/almash/admin/dewey.txt.

  • 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/variabelForklaring
    querySelve søkestrengen.
    bool_errorTillater opptil to feil bokstaver i søkestrengen ved verdien 'on'
    ageMaks alder (i dager) på de returnerte filene.
    fancylinksLager fancy overskrifter på filene hvis 'on'.
    caseIgnorer store/små bokstaver hvis 'on'.
    wholeMatcher ord inne i andre ord hvis 'on'.
    maxfilesØvre grense for antall filer i resultatet.
    maxlinesAntall linjer med match for hver fil.
    targetSetter inn en ny
    localcopySettes 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:
    • 238 timer
    Programvare
    • WebGlimpse