fiskeben.dk


Meninger med mening

Nørderi

Effektiv søgefunktion med Full Text indeks i MySQL

Selvom det de sidste år er meget populært at bruge dedikerede søgeindex som Sphinx og Lucene, så kan disse systemer i bund og grund mere, end hvad de fleste har behov for eller har til rådighed. Dedikerede søgeindex kræver som regel, at de kan køre som en egen service på serveren. Det tilbyder de færreste webhoteller.

At lave en fornuftig søgefunktion med MySQL-databasen er slet ikke så svært, og det er heller ikke så ineffektivt, som man nemt kan foranlediges til at tro. Det dækker til fulde behovet for små og mellemstore websider. Til for eksempel en blog (uanset størrelse) er MySQL rigeligt, men de dedikerede indekseringstjenester har rigtignok ekstra funktioner som facetter, markering af søgeord og relevans, som man enten må undvære eller implementere selv.

Denne guide retter sig mod de, der bruger MySQL til database for mindre og mellemstore websider, hvor man har brug for en form for søgefunktion.

Opret indeks på tabellen
MySQL har en funktion, der hedder Full-Text indeksering på tabeller. Det er kort fortalt et indbygget indeks i MySQL, som opdateres hver gang man kører en INSERT eller UPDATE på en tabel. Så søger databasen i indekset istedet for i selve tabellen, og søgningen vil gå hurtigere.

Det første vi derfor skal gøre er at oprette indekset på tabellen i MySQL. Det kræver, at vi først bestemmer os for, hvilke felter i tabellen, der skal kunne søges i. For eksempel har man gerne to felter, man har lyst til at gøre søgbare: overskrift og indhold. Disse skal vi oprette et fælles indeks over. Det gøres med denne kommando:

CREATE FULLTEXT INDEX mit_index ON min_tabel (felt_a, felt_b, felt_c);

Husk at skrive navnene på din tabel og de felter, som skal indekseres. Du kan selvfølgelig også kalde indekset noget andet end ‘mit_indeks’.

Søg i indekset
Søgningen i tabellen benytter MySQLs MATCH-AGAINST kommando i WHERE-delen af SQL-kommandoen. Kommandoen ser således ud:

SELECT * FROM min_tabel WHERE MATCH(felt_a, felt_b, felt_c) AGAINST('søgeord');

Her er det vigtigt at huske på, at felterne i MATCH-kommandoen skal være de samme, som du brugte i indekset, som vi lige har oprettet.

Dette er stort set alt du behøver, for at lave en udmærket søgefunktion med MySQL – med andre ord værktøjer, der allerede er tilgængelige på dit eget webhotel.

Hvis du selv vil udforske videre indenfor Full Text indeksering, så start med dokumentationen. Læs videre for en kort introduktion til nogle ekstra features.

Mere avancerede søgeformer
Det er muligt at udvide funktionaliteten lidt. AGAINST-kommandoen kan tage et ekstra parameter, der fortæller MySQL, hvordan den skal søge i indekset. Her kan man bruge mere eksotiske funktioner som binær søgning og søgning med naturligt sprog. Det følgende er kun en enkel introduktion – den dybere forståelse må du selv sørge for ved at læse dokumentationen eller søge på nettet.

Binært søg
Binært søg vil sige, at man kan bruge plus og minus foran ord i sit søgeudtryk for at fortælle databasen, hvilke ord der skal stå i teksten, og hvilke der ikke må stå i teksten. Et eksempel kunne være et søgeudtryk som ‘mobiltelefon -android’ som vil returnere de rækker, som nævner mobiltelefon men ikke android.

Query expansion
Query expansion er en mere ‘intelligent’ (i mangel af bedre ord) form for søgning, men den kan desværre også let give en masse irrelevante søgeresultater. I korte træk fungerer det sådan, at databasen kan udlede andre søgeudtryk ud fra det man faktisk har søgt efter. Med udgangspunkt i eksemplet ovenfor, så kan en søgning efter ‘mobiltelefon’ også give resultater, hvor kun ‘android’ forekommer, fordi databasen kan se, at ‘android’ ofte optræder i sammenhæng med ‘mobiltelefon’.

Ifølge dokumentationen virker dette bedst, når man bruger (meget) korte søgeord.

Natural language mode
For at være helt ærlig, så kan jeg ikke finde et entydigt svar på, hvad natural language mode egentlig er. Det ser ud til, at denne funktion også giver en score til rangering af resultaterne efter relevans. Desuden kan man antage, at navnet betyder, at funktionen er bedre til at håndtere søgninger, hvor man bruger mere naturligt sprog. Natural language mode blev først introduceret i MySQL 5.5.

Lidt af hvert

Softwareudvikling dengang

Skal man tro dette referat fra en software konference holdt i regi af Nato i 1968, er der ikke meget, som har ændret sig indenfor softwareudvikling de sidste 40 år:

We build systems like the Wright brothers built airplanes — build the whole thing, push it off the cliff, let it crash, and start over again.

Lyder bekendt.

Læs flere gode uddrag, hvor du også kan downloade referatet.

Design

4 forslag til julegaver til den designinteresserede

Står du og skal købe julegave til en, der interesserer sig for design, eller mangler du bare noget at forkæle dig selv med, så har jeg samlet fire forslag til hvad, du bør købe.

Symbol

En bog om symboler lyder måske umiddelbart kedeligt, men Symbol er et orgie af symboler og logoer delt ind efter type. Her er side op og side ned med illustrationer, og hvert kapitel starter med en lidt dybere beskrivelse af historien bag et kendt logo. Her er der masser af inspiration at hente.

Information is Beautiful

Er man til visualisering af data, kommer man ikke udenom Information is Beautiful. Her er 250 sider med farverige grafer og diagrammer – nogle seriøse og nogle med et glimt i øjet.

Objectified

Objectified er en dokumentar om designprocessen og om forbrugernes forhold til objekterne og indirekte personerne, der designer dem. I filmen kan du se interviews med blandt andre Jonathan Ive fra Apple og Dieter Rams, der har stået bag mange af Brauns succesfulde produkter op igennem tiden. Bonus: Objectified er en del af en trilogi, som også består af Helvetica (ja, den handler om fonten) og Urbanized, der handler om arkitektur. Anbefales på det kraftigste.

YouTube-forhåndsvisningsbillede

A Little Design as Possible

Apropos Dieter Rams, så kan man også overveje bogen om manden og hans designprincipper. Dieter Rams stod i mere end 40 år i spidsen for Brauns designafdeling, og hans arv lever den dag i dag videre i mange moderne produkter også udenfor Braun. Dette er også en bog, jeg har på min egen ønskeliste, så jeg kan egentlig ikke anbefale den ud fra andet end mit eget ønske om at eje den.

Apps

Spil Wordfeud på PC

Advarsel: En har kommenteret at hun ikke har modtaget koden efter at have betalt. Det kan være en fejl, men køb af spillet er på eget ansvar.

Nu behøver man ikke engang en mobiltelefon for at kunne tilfredsstille sin hang til Wordfeud. I en kommentar til mit indlæg om en bedre dansk ordbog i Wordfeud blev jeg gjort opmærksom på Wordfeud For PC.

Programet udnytter Android Emulatoren til at køre Wordfeud på en Windows PC. Det koster 1,75 euro, og jeg skal ikke kunne sige noget om hvor godt programmet er. Jeg tror dog at man nemt kan sætte Android Emulator op selv og slippe for at betale for programmet.

 

Deltag i Wordfeud-konkurrencen og vind 100 kr!