Om snel en efficient te functioneren (dat wil zeggen: het geeft snel pertinente antwoorden) gebruikt de zoekmachine een systeem van indexatie van de inhoud. Deze indexatie bestaat uit het analyseren van alle tekst in SPIP. Het onttrekt er alle woorden uit en slaat van ieder woord op waar het werd gevonden.
Dus gebruiken we de zoekmachine dan heft SPIP niet door de gehele tekst te gaan, maar kijkt het eenvoudig in de index of en waar het de gezochte woorden kan vinden. Een enorme tijdswinst (en hoe groter de tijd, hoe groter de winst).
De indexatie
Het principe is dus als volgt: neem een tekst, onttrek er alle woorden uit en noteer ieder woord in een database met een verwijzing naar de plaats waar het werd gevonden.
Heeft onze site bijvoorbeeld 3 artikelen met de volgende (zeer korte) tekst:
- artikel 1: «De kleine hond stierf van koude en honger.»
- artikel 2: «De grote hond is terug in huis.»
- artikel 3: «Het huis weerstaat de koude.»
We onttrekken de woorden van de artikelen en geven bij elk woord aan tot welk artikel het behoort (en we slaan alle woorden van 3 of minder tekens lang over):
- kleine: 1
- hond: 1, 2
- stierf: 1
- koude: 1, 3
- honger: 1
- grote: 1
- terug: 2
- huis: 2, 3
- weerstaat: 3
Zoeken we nu naar het woord hond:
- zonder indexering zouden we alle artikelen moeten herlezen om er het woord hond in te zoeken, wat op een grote site heel veel tijd in beslag neemt;
- met de index vinden we snel het woord hond terug: het is te vinden in de artikelen 1 en 2.
Het gewicht
Bij de indexatie komt een tweede principe: een weging. Komt het woord bijvoorbeeld voor in de titel van een artikel en in de tekst van een ander artikel, dan willen we het artikel waarin het in de titel verschijnt als eerste weergeven. En komt een woord 25 keer voor een een bepaald artikel en maar twee keer in een ander, dan moeten we dat eerste artikel bovenaan laten zien.
Een eenvoudige indexatie volstaat dus niet. Zoeken we naar hond, dan vinden we de artikelen waarin dat woord voorkomt, maar we weten niet hoe we beide artikelen moeten klasseren (komt het hond er één keer in voor of 20 keer...).
SPIP gaat daarom een gewicht toekennen aan ieder woord in ieder artikel. Het woord krijgt dus punten in functie van de plaats waar het werd gevonden en hoe vaak het woord voorkwam:
in de titel | 8 punten |
in de subtitel | 5 punten |
in de boventitel | 5 punten |
in de beschrijving | 4 punten |
in de koptekst | 3 punten |
in de tekst | 1 punt |
in de post-scriptum | 1 punt |
Komt het woord meermaals voor, dan telt iedere keer mee.
Verschijnt bijvoorbeeld het woord hond in een artikel:
- één keer in de titel: 8 punten
- tweemaal in de beschrijving: 2x4 = 8 punten
- zes keer in de tekst: 6x1 = 6 punten
- totaal: 8 + 8 + 6 = 22 punten.
Het woord hond staat in de index dus geregistreerd als:
- hond, in artikel X, 22 punten;
- hond, in artikel Y, 15 punten;
- ...
Zoeken we naar het woord hond, dan zullen dus dankzij deze index de artikelen X en Y gevonden worden, maar kunnen we de artikelen ook klasseren aan de hand van het aantal punten: artikel X heeft een beter resultaat dan artikel Y.
Trefwoorden: veel gebruikers verwarren trefwoorden en de indexatie. Trefwoorden hebben van oorsprong niets te maken met de indexatie: wanneer SPIP zoekt, kijkt het niet naar de tefwoorden die aan een artikel gekoppeld zijn, het zoekt in de zoekindex.
Alhoewel... Trefwoorden helpen wel mee in het gewicht van een artikel. Is een trefwoord aan een artikel gekoppeld, dan komt dit trefwoord zelf in de indexatie terecht met een behoorlijk gewicht (12 punten voor de naam van het trefwoord, 3 punten voor zijn omschrijving).
Alle inhoud van SPIP wordt geïndexeerd: artikelen, nieuwsberichten, rubrieken, auterus, trefwoorden, gerefereerde sites (en wordt een site gesyndiceerd, dan worden ook de overgenomen artikelen geïndexeerd).
Waar wordt alles opgeslagen?
De indexgegevens staan in de database van SPIP. We zullen je het technische verhaal onthouden, maar je kunt het eventueel lezen in de Franstalige versie.
Welke woorden worden geïndexeerd?
SPIP zal niet de volledige inhoud indexeren.
- HTML code wordt niet geïndexeerd.
- Woorden van minder dan 4 letters worden overgeslagen (in feite is het minder dan 3 letters, maar zoektermen van 3 tekens worden niet toegepast). Dit punt beantwoordt vele vragen van gebruikers...
Het probleem is om zo pertinent mogelijke resultaten te verkrijgen. Daarom moet aan echte woorden de voorkeur worden gegeven. Zoeken we bijvoorbeeld naar de hond, dan is het belangrijke woord hond, en niet de. Dat is wel jammer voor een kat...
Hadden we in het eerste voorbeeld alle worden geïndexeerd dan zou het zoeken naar de hond een heel ander resultaat gegeven hebben, en zeker niet wat we verwachtten.
Wanneer wordt er geïndexeerd?
De indexatie gebeurt op drie momenten:
- bij het valideren wordt een artikel onmiddellijk geïndexeerd;
- bij de aanpassing van een gepubliceerd artikel vindt een nieuwe indexatie plaats;
- als achtergrondtaak wanneer de zoekmachine bijvoorbeeld pas later wordt ingeschakeld.
De zoekmachine drukt zwaar op de capaciteit van de server. Bij een trage, lichte machine kan de zoekmachine dan ook beter worden uitgeschakeld.
Het zoeken
Zoeken naar een enkele woord...
SPIP zoekt in de index en vindt het woord. Voor het woord hond vonden we de artikelen X en Y. SPIP haalt ook het aantal punten op voor iedere artikel en toont aan de hand hiervan het resultaat.
Je zoekt op meerdere woorden...
SPIP kent geen constructie van het type «AND», «OR», enz.
Zoek je op meerdere woorden dan gaat SPIP ieder woord opzoeken, de punten voor ieder artikel (of nieuwbericht, ...) ophalen en deze optellen.
Zoeke we bijvoorbeeld naar hond, grote, huis, dan vindt het voor ieder woord:
- hond: artikel X (22 punten), artikel Y (15 punten),
- grote: artikel X (12 punten), artikel Y (2 punten), artikel Z (5 punten),
- huis: artikel Y (3 punten), artikel Z (17 punten).
SPIP telt de punten voor elk artikel op:
- artikel X: 22 + 12 = 34 punten,
- artikel Y: 15 + 2 + 3 = 20 punten,
- artikel Z: 5 + 17 = 22 punten.
De sortering voor de artikelen bij zoekopdracht hond, grote, huis is: artikel X, dan artikel Z, en dan artikel Y. (In de skeletten kan deze sortering worden bewerkstelligd met het baken #POINTS
, zie artikel «De zoekbakens en -lussen».)