Concevoir un moteur de recherche

Cette idée, chez moi, de créer un moteur de recherche n’est pas nouvelle. Elle a émergé une 1ère fois au début des années 2000, en 2004 très précisément. Avec Wroom, il s’agissait d’un annuaire de liens vers des sites techniques que je consultais très régulièrement. Je l’avais développé en PHP. Et puis, en 2012, je me suis lancé dans un projet de vrai moteur que j’ai laissé tomber, tout en le conservant dans un coin de ma tête. Il y a quelques semaines, j’ai donc dû tout reprendre à zéro et, pour tout vous dire, je trouve que j’avance bien plus vite aujourd’hui qu’il y a 10 ans ! J’ai aujourd’hui les idées beaucoup plus claires.

Concevoir un moteur de recherche

Côté technique, j’ai choisi la base de données MariaDB pour notamment ses nombreuses possibilités de réplication, mais surtout pour ses index full-text. Concernant le code, n’ayant pas besoin de performances particulières, j’ai opté pour le PHP orienté objet.

Comment fonctionne un moteur de recherche ?

1ère étape : le crawl

Les moteurs, en s’appuyant sur votre fichier sitemap.xml, soit sur vos fils RSS, doivent collecter les liens http, https – pour l’essentiel – vers les pages de sites. Cette phase ne requiert pas de ressources particulières : un peu de stockage, un accès Internet rapide et une fréquence de crawl importante. Dans mon cas, je me suis calé sur un intervalle d’une minute trente pour le scan des mes sources au format RSS. Aucune nécessité, là-encore, de fonctionner en mode synchrone.

2e étape : l’indexation

C’est de loin la phase la plus complexe, mais aussi totalement asynchrone. Elle consiste, avec cURL associé à Tor, à lire le contenu des pages et d’en extraire les informations importantes qui donnent un sens au document : title, h1, h2, h3, etc ainsi que le texte associé aux ancres. C’est à cette occasion que nous pouvons rencontrer parfois quelques difficultés, comme celle de se voir bloquer par un site comme lemonde.fr qui détecte les machines issues du réseau Tor. Le sens naît du lien. Cette phase d’indexation nous permet d’alimenter le crawl grâce aux liens internes et externes présents dans la page. Le processus est donc itératif. Concernant les liens, il faut aussi vérifier qu’il ne soit pas en erreur 404. L’indexation est de loin le processus le plus gourmand en terme de stockage ! Pas de besoin de fonctionner en mode synchrone.

3e phase : le post-traitement

Concernant les informations remontées dans la table issues de l’indexation, il faut évidemment la nettoyer d’expressions et de mots-clés sans importance en s’appuyant le plus possible sur des triggers, puis actualiser les index full-text. Je planifierai ces opérations aux alentours de 4 h 00 du matin pour la version française du moteur. Pour les autres versions qui viendront par la suite, je m’ajusterai aux différents fuseaux horaires. C’est évidemment plus compliqué pour l’anglais ou l’espagnol parlés dans tous les pays du monde ! Cette opération sera faite à l’aide d’un EVENT programmé directement dans MariaDB. Le temps pris par cette opération est proportionnel à la volumétrie des tables. Là-encore, pas de besoin de fonctionner en mode synchrone.

4e phase : le calcul de la pertinence

Il s’agit de calculer un indice synthétique en attachant un poids à différents éléments comme :

Je suis encore en train, à l’heure où je vous parle, de réfléchir à la marge au calcul de cet indice, notamment en intégrant cet élément de notoriété dans mon algorithme. J’accorde beaucoup d’importance à la pertinence !

5e phase : l’IHM

L’IHM sera extrêmement classique. Je m’inspirais très largement des standards issus des moteurs existants, en minimisant l’affichage des informations au strict minimum :

Soyons clair, je n’en suis pas encore là ! ;+) J’ai de nombreux arbitrages techniques à faire.

6e phase : le choix du nom du domaine et perspectives

Mon objectif n’est pas de devenir un Google bis. Je n’en ai ni la prétention, ni les moyens financiers et techniques, notamment pour ce qui est du stockage et des capacités d’indexer en temps réel. Mon objectif sera avant tout de montrer ce moteur afin d’obtenir d’éventuels partenariats financiers en vue de m’accompagner dans ce projet ou plus prosaïquement de le vendre. Pourquoi pas, non plus, envisager une régie publicitaire avec des publicités ciblées en fonction des sujets ou des objets de recherche ? Donc le choix du nom de domaine est pour l’instant sans importance ! Et je n’en sais strictement aucune idée.

Internet /