Søkeindekser og trunkering av søkeord på to eller tre tegn
Rett før jul 2015 ble vi nødt til å gjøre en endring i oppsettet av søkeindekser for globalt personsøk og avansert personsøk i digitalarkivet. Endringen med førte at man må bruke minimum tre bokstaver i trunkering av søkeord, mot to tidligere. Skal du søke på et ord kunne du før skrive ab*, mens nå må du skrive abc* for å få treff på forskjellige skrivemåter.
Årsaken til denne endringen var at søk med trunkering på to bokstaver, og spesielt med trunkering på tall (f.eks fødselsår) tok flere minutter. Når et slikt søk pågår over lengre tid sperres tjenesten for andre brukere fordi alle ressurser til slutt blir låst til et slikt langvarig søk. Det gjør at tjenesten blir utilgjengelig for alle andre og gir feilmelding. Det er ikke noe vi ønsker. Dessverre var verken den egentlige årsaken eller en permanent løsning lett å finne. Derfor måtte vi øke grensen for trunkering til tre tegn for å unngå at tjenesten ble utilgjengelig.
Søkemotoren vi bruker heter Sphinx, og den har fungert raskt og fint i de fem årene vi har brukt den. Nå ser vi at datamengden har blitt så stor at systemet ikke klarer å håndtere volumet i de mest komplekse søkene. Slik er det med de fleste datasystemer. Søkeindeksen for personsøk er nå på over 28millioner personposter. I en kombinasjon med trunkering på to tegn blir søkeindeksen for stor til at det oppsettet vi har, kan håndtere størrelsen.
Første uka i januar 2016 jobbet vi intenst med å finne en løsning på problemet. Det var et møysommelig arbeide, men vi tror nå vi har funnet en løsning slik at vi kan gå tilbake til trunkering på to tegn. Det vil iverksettes så raskt som mulig.
Den kompliserte forklaringa
Det viser seg at problemet med søk kommer av en endring i hvordan Sphinx fungerer. Når man bygger en søkeindeks med trunkering på to tegn, skjer en såkalt “ekspandering”, dvs. at alle unike ord som begynner på de to bokstavene ordnes i rekkefølge så de kan finnes raskt. I tidligere versjoner skjedde denne ekspanderingen idet indeksen ble generert. Det medførte store indekser som tok lang tid å generere. I nyere versjoner er dette gjort om, slik at ekspandering skjer idet man utfører et søk. Dette skjer med alle felt som begynner med ønsket bokstavkombinasjon, uansett om feltet er med i søket eller ikke. Dette er normalt sett ikke noe problem når man søker med bokstaver, men vi oppdaget at det var et spesielt stort problem hvis man gjorde et søk på “18*”. Da kunne et søk ta flere minutter! Det skyldes at alle unike datoer i databasen på 1800-tallet blir ekspandert. Fordi vi har så mye data med datoer på 1800-tallet (de fleste personene i FT1900 og en mengde kirkeboksdata), er svrt mange av de potensielt 36500 kombinasjonene representert, noe som viser seg å bli for mye.
I dag er det en stor, felles søkeindeks for både fritekstsøket og avansert personsøk. Det var en riktig metode på tidligere versjoner av Sphinx, men ikke nå.
Løsningen innebærer bl.a å sette inn flere prosessorkjerner (vi øker fra 12 til 24) og mer minne på serveren som kjører søkemotoren. Dette gjør at vi kan splitte opp en indeks i flere biter og benytte flere prosessorkjerner i parallell når et søk utføres. Men hovedløsningen er faktisk så konkret at vi splitter opp søkefeltet i hendelsesdatoen på avansert personsøk i år, måned og dag, slik at man kan søke i respektive felt hver for seg. Antall mulige kombinasjoner på “18*” reduseres dermed fra 36500 til 100. Og da kan vi skru tilbake til trunkering på to tegn.
En annen positiv side ved dette er at vi kan reindeksere på langt kortere tid. På tidligere versjoner av sphinx tok det 7 timer å reindeksere. Nå, på vår testserver, med 4 parallelle indekser tar det kun 10 minutter. I praksis betyr det at vi kan publisere nye kilder i løpet av dagen, og ikke vente til dagen etter før det er publisert. Men akkurat det krever litt mer arbeid før vi kan få på plass.












