Ça fait plusieurs années que j'avais envie de tester YaCy. C'est désormais chose faite. \o/
YaCy est un moteur de recherche pour le web (attention, y'a d'autres types de moteurs de recherche genre indexation de fichiers). Pas un proxy devant Google comme l'était StartPage (devenu depuis un métamoteur de recherche, apparemment) ou le défunt Scroogle. Pas un métamoteur qui agrège les résultats d'autres moteurs existants comme Seeks ou Searx. YaCy fait tout lui-même : parcourir (crawler) le web, indexer les contenus, chercher dans l'index.
Mieux que ça, YaCy fonctionne en pair à pair : chaque ordinateur sur lequel il est installé rejoint un même réseau et contribue à stocker une partie de l'index commun voire il parcourt le web pour le remplir. Le seul bout de point central que j'ai identifié à première vue, c'est que le code du soft contient l'adresse de quelques serveurs qui seront contactés au démarrage de l'instance YaCy pour récupérer rapidement une liste (incomplète, imparfaite, etc.) de nœuds YaCy. Car l'initialisation avec seulement la DHT, ça prend du temps. Un peu comme les trackers BitTorrent qui existent par commodité. Ils ne sont ni indispensables ni immuables.
Du coup, on retrouve les caractéristiques désirables habituelles : logiciel libre, sous le contrôle de l'utilisateur, P2P, pas censurable, etc.
Notons que la participation au réseau P2P est facultative : YaCy peut servir à indexer, en privé, un intranet. YaCy peut servir à proposer un moteur de recherche sur votre site web personnel en lieu et place d'un "applet" qui lance un « site:monsite.exemple mot-clé_saisi » sur Google.
Les bons points
- Y'a un dépôt Debian. \o/
- Toute la machinerie P2P est impressionnante. Même chose pour le parcours du web : ça juste fonctionne, c'est bluffant.
- L'interface web d'administration est, là aussi, impressionnante avec des graphes de conso, un rapport d'activité temps réel, une cartographie du réseau et des pairs, des graphes de relations entre les sites web, etc. Les informations de debug sont peut-être un peu too much, j'vais y revenir.
- Il est possible d'indexer un site web à partir de son flux RSS. Et YaCy peut le consulter régulièrement pour indexer tout seul les nouveautés. Je trouve ça cool.
- YaCy peut aussi être utilisé en proxy HTTP. Ainsi, il parcourt tous les sites web que vous consultez sauf ceux avec des variables GET et POST et ceux… en https. Autant dire que ça n'a plus grand intérêt aujourd'hui et encore moins si vous utilisez l'extension HTTPS everywhere de l'EFF. Mais l'idée est intéressante. Note : pour que le mode proxy fonctionne, il faut configurer votre navigateur et activer le mode proxy transparent dans l'interface d'admin de YaCy, « System Administration » -> « Proxy Access Settings ». Sinon, chaque site web vous ramènera à votre portail YaCy.
Les mauvais points
-
Comme la plupart des applis en Java (on retrouve ça avec Kafka, Storm ou Zookeeper, par exemple), la verbosité est mal configurée par défaut, ce qui fait que YaCy consigne absolument tout dans ses logs : quel pair lui dit bonjour, envoi/réception de fragments de DHT, etc. Bref, ça bourrine bien le support de stockage. Et il n'y a aucune option dans l'interface web pour changer ce comportement. Ma méthode :
sudo sed -i 's/INFO/WARNING/' /var/lib/yacy/LOG/yacy.logging
sudo systemctl restart yacy
- Lors de la première connexion à l'interface web d'administration de YaCy, l'installation basique vous informera que votre port n'est pas ouvert. Il faut ouvrir le port tcp/8090, en IPv4 et en IPv6. Attention : la vérification de la bonne ouverture des ports se fait en demandant à des pairs du réseau YaCy dont ça prend un peu de temps avant de vous informer que le port est bien ouvert. Méthode de bourrin pour aller plus vite : soit configurer votre pare-feu avant le premier démarrage de YaCy, soit redémarrer YaCy. :D
- YaCy fonctionne encore majoritairement en IPv4. C'est cette adresse qui est diffusée dans le réseau, celle qui est présentée comme adresse principale. Aucune option pour changer cela. J'ai aussi tenté un « -Djava.net.preferIPv6Stack=true » trouvé sur les forums, sans succès.
- Entre le mode crawler, le mode proxy, le mode extranet, site web, etc., il faut bien reconnaître que YaCy est complexe et monolithique (tout dans le même jar).
Les points rédhibitoires
- La grande force de Google Search, c'est la pertinence des résultats retournés. Or, il faut bien reconnaître que YaCy touche le fond. J'ai l'impression d'être revenu à Altavista et Voila que j'ai connu avant Google. Je pense que le travail de YaCy doit se concentrer sur ça. J'ai bien noté l'existence de sortes de "dicos de synonymes" pour enrichir l'index et permettre à YaCy de "comprendre" que tels mots sont des villes (et du coup d'afficher des cartes et des résultats plus pertinents), que tels mots sont des systèmes GNU/Linux, etc. Bref, donner du sens aux requêtes, ne pas être terre-à-terre, mot pour mot. Y'a tout un travail colossal autour de ça. Mais on est vraiment loooooin derrière les moteurs de recherche d'aujourd'hui : taper « Google » ne conduit pas à des résultats comportant google.(fr|com), même chose pour Amazon. « gouvernement français » ne conduit ni à des résultats Wikipedia (pourtant indexés ! ), ni aux sites web officiels de la République. :D
- L'aspect qui me dérange le plus d'un point de vue éthique, c'est que YaCy journalise énormément de choses : les pairs en contact (est-ce que ce pair a juste dit bonjour ou est-ce qu'il a effectué une recherche (le contenu de la recherche n'est pas loggé), etc.), les dates de modification de la conf', les performances de chaque partie du soft, mais aussi les recherches effectuées en local ou via l'API de recherche à distance. Alors oui, c'est stocké uniquement pour la durée d'exécution de YaCy mais c'est extrêmement discutable : je ne veux pas d'un Google-like, même si c'est sur ma machine. Une faille de sécurité et ça peut fuiter, par exemple. Le contenu d'une recherche ne doit pas être stocké. Je n'ai pas trouvé comment désactiver cette fonctionnalité déplaisante.
Notes diverses
En résumé : je suis plutôt impressionné par la masse de taff abattue, par le fonctionnement P2P mais la pertinence des résultats rend un usage au quotidien vraiment difficile à envisager. Le problème, ce n'est pas de crawler toujours plus de contenus puisque même avec du bon contenu indexé, les résultats ne sont pas pertinents. Le problème c'est l'algo de construction et d'enrichissement de l'index et de tri des résultats. N'est pas Google qui veut. :(