De zoekmachine

SPIP is voorzien van een zoekmachine die standaard is uitgeschakeld. Wanneer deze machine door een beheerder wordt geactiveerd in de configuratie pagina, gaat dez op zoek naar verschillende soorten informatie in de database: artikelen, rubrieken, nieuwsberichten, auteurs en trefwoorden. Ook forumberichten en ondertekeningen van petities worden geïndexeerd.

Principe

Er zijn twee manieren om een ​​zoekmachine te maken. De eerste is om domweg te kijken in de bestaande typen opslag (HTML-bestanden, database ... afhankelijk van de site). Deze methode is traag omdat het type opslag niet voor dit doel bestemd is.

De tweede methode, die voor SPIP werd gekozen (die ook in alle professionele zoekmachines wordt gebruikt), is het gebruik van een specifiek opslagmethode bestemd voor zoekopdrachten. Zo wordt bijvoorbeeld de score van elk woord in een artikel direct opgeslagen om deze gemakkelijk terug te vinden en zo gemakkelijk de totale score van een zoekopdracht door een simpele optelling te berekenen. Het voordeel is dat het zoeken erg snel gaat: bijna net zo snel als de berekening van een pagina. Het nadeel is dat de gegevens opgebouwd moeten worden: dit heet indexeren. Indexering heeft een kostprijs voor wat betreft de middelen (CPU tijd en schijfruimte), en het introduceert ook een lichte vertraging tussen het toevoegen of bewerken van content, en het effect van die toevoeging of wijziging op de zoekresultaten.

Anderzijds zijn we net als voor de rest van de SPIP software verplicht van PHP en MySQL gebruik te maken, waardoor een krachtige motor niet te is te realiseren, in termen van snelheid, maar ook voor wat betreft diverse verbeteringen (indexering van externe documenten op de site, het creëren van semantische velden om meer gedetailleerde zoekopdrachten te maken, enz.).

Het voordee van een interne zoekmachine is wel dat je de weergave van de resultaten kunt beheren op dezelfde manier (skeletten) als de overige pagina’s in SPIP en dus ook eenzelfde visuele weergave bereikt.

De indexering

Hoe de indexering in zijn werk gaat, kun je zien in het bestand ecrire/inc_index.php en de activiteit vind je terug in bestand ecrire/data/spip.log.

Verder verwijzen we naar het artikel Hoe de zoekmachine van SPIP werkt.

Het zoeken

Het zoeken wordt uitgevoerd door het simpelweg scheiden van de zoektekst in de verschillende woorden met hetzelfde filter dat wordt toegepast bij het indexeren: het schrapping van woorden van drie letters of minder (met uitzondering van acroniemen) en transcriptie.

Voor elke gezochte inhoud wordt de score van de afzonderlijke woorden daarna toegevoegd aan de totale score. Tot slot worden de resultaten (meestal) weergegeven in aflopende volgorde van deze score ({par points}{inverse}), wat wil zeggen op pertinentie (maar dat is de beslissing van de persoon die het skelet maakt waarover je leest op deze pagina).

Prestaties

Snelheid

Op een recente en niet te veel belaste server duurt het indexeren van een lange tekst (enkele tienduizenden tekens) tussen één en twee seconden: het wachten is bijna onmerkbaar vergeleken met de laadtijd via het netwerk. Korte inhoud worden bijna onmiddellijk geïndexeerd. Natuurlijk moeten deze conclusies worden aangepast aan de omvang van het domein.

Statistisch gezien mag je aannemen kan dat elk inhoudelijk slechts éénmaal wordt geïndexeerd: er zullen doorgaans veel meer bezoeken aan een site zijn, waardoor de bijkomende server load lijkt te verwaarlozen.

Kwaliteit

De kwaliteit van de indexering is minder dan bij professionele zoekmachines. PHP is een trage taal. Daarom is de extractiefase van woorden vereenvoudigd om een maximaal resultaat bij een minimale belasting te realiseren. Daarom zal de index gegevens bevatten die eigenlijk als "afval" beschouwd moet worden, dat wil zeggen stukken tekst die niet met "echte" woorden overeenkomen, maar als zodanig zijn geïndexeerd (dit is vaak technische inhoud zoals bestandsnamen, of onjuiste passages door gehavende interpunctie).

De zoekopdracht maakt geen booleaanse uitdrukkingen mogelijk, het komt meestal neer op een «OF» logica. Toch zal door de score vaak de meest treffende informatie als eerse worden weergegeven. Een zoekopdracht op « de rode hand» zal artikelen met «rode» en «hand» aangeven voordat het artikelen toont met «rodeo» of «handwerk» - maar verwacht geen enkel resultaat met «rood»...

Schijfruimte

MySQL is niet specifiek ontworpen voor de opslag van indexeringsgegevens en het gebruik maken van de zoekmachine heeft de neiging om veel schijfruimte te gebruiken door een groeiende database. Om wat details te geven: de index neemt het dubbele van een artikel in.

Als je ooit de zoekmachine uitschakelt om schijfruimte te besparen, vergeet dan niet om de indexgegevens te verwijderen om daadwerkelijk de schijfruimte die werd ingenomen door deze gegevens vrij te maken.

Auteur Hanjo Gepubliceerd op:

Vertalingen: عربي, català, English, Español, français, italiano, Nederlands, українська