Søgning i PDF-filer i WordPress

WordPress har en indbygget søgefunktion som kan anvendes til at finde sider og indlæg der indeholder bestemte ord. Søgninger foretages som regel ved hjælp af en formular på websitet, men man kan også søge direkte fra browserens adresselinje ved at skrive ?s=<søgeord> efter en url (f.eks. https://eksempel.dk?s=cykel).

Hvis man uploader PDF-dokumenter til et WordPress website, så vil man imidlertid hurtigt opdage at søgninger ikke finder disse, uanset om søgeordet findes i PDF-dokumentet eller ej. Forklaringen er at WordPress kun søger i indhold i websitets database – indhold af uploadede filer bliver ikke taget i betragtning.

For at kunne søge i PDF-dokumenter, så skal tekstindholdet fra dokumentet derfor føjes til WordPress databasen. Det kan man gøre ved at oprette felter med post metadata (“custom fields”) som man knytter til indlæg eller filer i mediebiblioteket. PDF-dokuments tekst kan så gemmes i dette felt.

Standard WordPress søgning

Standard WordPress søgning foregår ved at gennemsøge databasen fra den ene ende til den anden og notere hvor søgeordet/-ordene findes. Det er en relativt langsom proces – det svarer til at lede efter forekomster af bestemte ord i en bog ved at starte på side 1 og så læse bogen igennem til slutningen (webservere læser heldigvis hurtigere end vi gør).

WordPress’ indbyggede søgefunktion medtager som udgangspunkt ikke indhold i post metadata, men man kan ændre på dette ved hjælp af WordPress indbyggede filter-funktionalitet. Alternativt kan man benytte et WordPress plugin der tilføjer denne funktionalitet, f.eks. WP Custom Fields Search

Indekseret søgning

I stedet for at søge databasen igennem fra start til slut ved hver søgning, kan man oprette et søgeindeks som man kan slå søgeord op i, svarende til den måde som man bruger stikordsregisteret i en bog. Det er væsentligt hurtigere end at søge databasen igennem fra start til slut ved hver søgning, og man har mulighed for at knytte data til de enkelte søgeord så man f.eks. kan vise søgeresultater med bestemte søgeord først.

Hvis indekseret søgning skal fungere med PDF-dokumenter, så skal tekstindholdet fra disse føjes til søgeindekset. Det vil man ofte vælge at gøre på samme måde som når man bruger WordPress’ indbyggede søgefunktion, dvs ved at gemme tekstindholdet fra PDF’erne som post metadata. Herefter kan man så bygge søgeindekset ud ved at gå databasen igennem og gemme alle relevante søgeord.

Plugins til indekseret søgning

Den enkleste måde hvorpå man kan anvende indekseret søgning i WordPress er ved at benytte et færdigt plugin. Et par af de mest populære er Relevanssi og SearchWP. Relevanssi findes både i en gratis udgave (der i mange tilfælde er tilstrækkelig) og som betalings-plugin, mens SearchWP kun fås mod betaling.

De to plugins fungerer i princippet på samme måde – efter installation skal man først igennem en proces hvor alt indholdet læses og føjes til søgeindekset hvorefter man kan foretage søgninger. Når man efterfølgende tilføjer eller sletter indhold, så opdateres søgeindekset med ændringerne så det hele tiden matcher det aktuelle indhold. Den første indeksering kan tage lang tid, afhængig af hvor meget indhold der ligger i WordPress, mens de efterfølgende opdateringer af indekset kan foretages hurtigt.

Indeksering af PDF-dokumenter med Relevanssi og SearchWP

Både Relevanssi (betalingsversionen) og SearchWP giver mulighed for automatisk at hente tekst ud af PDF-dokumenter og gemme teksten som post metadata der så kan føjes til indekset. Måden dette gøres på er dog meget forskellig:

Udviklerne af SearchWP bruger deres egen kode til at hente tekst ud af PDF-dokumenter, så man er ikke afhængig af andre tjenester for at benytte denne løsning. Til gengæld belastes den server WordPress kører på, hvilket kan give problemer hos de webhoteller, hvor mange brugere deler den samme server.

Relevanssi sender PDF-dokumenterne til en ekstern server der kører Apache Tika, hvor tekstindholdet trækkes ud og sendes tilbage til WordPress, hvorefter Relevanssi opdaterer søgeindekset. Belastningen på webserveren bliver dermed minimal, men man er til gengæld afhængig af at Tika serveren er tilgængelig når et PDF-dokument skal behandles.

Begge løsninger er relativt lette at arbejde med, og begge plugins giver mulighed for at justere på vægtning af forskellige former for indhold i søgeresultater, ligesom man kan anvende synonymer og stopord (ord som aldrig skal føjes til søgeindekset).

Eksterne søgedatabaser og søgetjenester

Brug af Relevanssi eller SearchWP til indekseret søgning har nogle begrænsninger;

  • Den underliggende database er MySQL eller MariaDB, ikke en egentlig søgedatabase
  • Funktionerne til indeksering og søgning er udviklet og vedligeholdes af små teams med begrænsede ressourcer
  • Indhold indekseres på samme måde uanset hvilket sprog det er skrevet på

Hvis man har behov for at søge i store mængder indhold, eller hvis man ikke kan få søgninger til at virke optimalt med Relevanssi eller SearchWP, så kan man i stedet vælge at implementere hjemmesidens søgefunktion ved hjælp af en dedikeret søgedatabase eller søgetjeneste, som f.eks. Elasticsearch eller Algolia.

Indeksering og søgning foregår i princippet som beskrevet ovenfor, men indeksering og opslag på søgeord foregår ikke længere via WordPress. Arbejdet uddelegeres i stedet til en ekstern tjeneste, der som regel ligger på en anden server – måske et helt andet sted i verden.

Fordelen ved denne løsning er at indeksering og søgning kan udføres med værktøjer der er specielt beregnet til opgaven, og som giver langt flere muligheder for at bestemme præcis hvilke resultater der skal vises som svar på en given søgning. En dedikeret søgedatabase er også bedre til at håndtere forskellige sprog, så en søgning i indhold skrevet på dansk kan tage højde for hvordan det danske sprog er opbygget og f.eks. medtage resultater fra indhold hvor det samme ord optræder i en anden bøjningsform end søgeordet (”cykle”, ”cykler”, ”cyklede” osv.)

Den største ulempe ved denne type løsninger er at udviklings- og driftsomkostninger er en del højere end omkostningerne til installation og konfiguration af et WordPress.