Een zoekmachine bouwen #5 - Een stap verder
11 juli 2018Nu de boel weer even draait, begint er weer wat data binnen te komen. Inmiddels is de database 8GiB groot, waarbij de keywords en de bijbehorende scores de meeste ruimte innemen. Op zich zie ik qua performance nog geen problemen, dus dat is gunstig. Wel denk ik dat er wat moet veranderen bij het opslaan van de keywords en phrases.. en nog een paar andere ingrijpende veranderingen.
Keywords en phrases opslaan
Wat ik eerder heb gedaan is een onderverdeling in de keywords, op basis van alfabet en phrase lengte. Voor de phrase "Piet is een snelle jongen" worden op dit moment 12 keywords geregistreerd:
- Piet
- is
- een
- snelle
- jongen
- Piet is
- is een
- een snelle
- snelle jongen
- Piet is een
- is een snelle
- een snelle jongen
Hoewel dit prima werkt, zijn er twee nadelen:
- Het neemt veel data in
- Alles wordt opgeslagen in één tabel in de database
In het verleden heb ik problemen gekregen met de grootte van de tabel. MySQL (of in dit geval MariaDB) met MyISAM heeft problemen met enorme tabellen. (InnoDB kan sowieso niet tippen aan MyISAM voor dit soort databasegebruik, dus die laat ik links liggen.)
De oplossing voor het keywordprobleem heb ik eerder als volgt ingericht: het maken van alfabetische tabellen met een indicatie van welke phrase lengte wordt opgeslagen. Bijvoorbeeld:
aa_1 voor enkele woorden beginnend met 'aa'. Het woord 'aan' zou hier in komen.
he_3 voor phrases met 3 woorden, de phrase 'heeft een aap' zou hier in komen.
Het is alles behalve een perfecte oplossing. In zekere zin verleg je hiermee alleen het probleem, maar het volstaat voor nu.
Robots.txt en de sitemap
Daarnaast is het de bedoeling om een crawler te gaan maken voor de robots.txt. Deze moet met name informatie gaan geven over welke URL's van een website niet geindexeerd mogen worden.
Ook staat er in de robots.txt een verwijzing naar een sitemap. Deze wil ik apart indexeren en koppelen aan de domeinnamen.
Dat betekent dat er een aparte domeintabel moet komen, maar als ik dit ga doen, wil ik dit ook direct op basis van TLD doen. Dan is er een 'eenvoudige' onderverdeling in de data.
In theorie zou deze tabel als volgt gevuld kunnen zijn:
bron: www.sidn.nl/a/kennis-en-ontwikkeling/nl-in-cijfers
Natuurlijk ontbreken hier nog wel wat TLD's, maar het geeft wel een idee van de top 25. Ik mag hopen deze cijfers überhaupt ooit te halen.
Het was de bedoeling om te beginnen met de zonefile van de SIDN, maar op de website van SIDN zelf kan ik deze helaas niet downloaden. Op zich maakt het ook niet uit :-)
Hoe dan ook. Met de aparte domeintabellen, kan ik de sitemaps downloaden en koppelen aan deze domeinnamen. Daarnaast kan ik per domeinnaam de gemiddelde downloadsnelheid én paginagrootte bepalen. Dat combineren met het aantal inkomende en uitgaande links, en voilà, je hebt de basis voor domain authority.
To do voor volgende update:
- Domeinnamen in database sorteren in tabellen op basis van TLD
- Disallow paden per domeinnaam opslaan (tevens op basis van TLD tabel)
- URL's per domeinnaam opslaan (tevens op basis van TLD tabel)
- Cache tabel ook op basis van TLD maken
- Robots.txt volgen
En daarna:
- Als er een HTTPS variant beschikbaar is, deze prefereren boven de HTTP variant
- Als er een non-www variant is, deze prefereren boven de www variant
- Geen rel="nofollow" links volgen
- Penalty voor keyword stuffing
- Extreem lange meta descriptions, titles, etc. afkorten en getrimd gedeelte niet meenemen in score
- Taalherkenning op basis van N-grams (zie "N-gram models for language detection" door Carlos Ramisch)
Internet Marketing
Een zoekmachine bouwen #8 - PageRank, Zoeken, etc.Geplaatst op 5 december 2019
Een zoekmachine bouwen #7 - Backlinks & Tabellen
Geplaatst op 22 juli 2018
Een zoekmachine bouwen #6 - Full page cache
Geplaatst op 13 juli 2018
Een zoekmachine bouwen #5 - Een stap verder
Geplaatst op 11 juli 2018
Auteur: Edwin Dijk
TimeTick producten
Urenregistratie software
Gratis urenregistratie software