- Christophe Nowicki - http://www.csquad.org -
Faire son propre moteur de recherche avec Nutch
Posted By cscm On January 11, 2010 @ 23:22 In Debian, Network | Comments Disabled
Allez aujourd’hui, je lâche mon troll, qui n’a pas manger depuis plusieurs semaines :
S’il y a quelque chose que vous faites et que personne ne doit savoir, peut-être qu’il faudrait commencer par ne pas le faire
Source : Google CEO Eric Schmidt Dismisses the Importance of Privacy [1]
Il a raison le bon docteur Schmidt, il aurait du faire plus attention Liu Xiaobo [2] avant de chercher droits de l’homme sur un moteur de recherche censuré [3]…
Bref vous m’avez compris ce genre de parole dans la bouche de l’homme le plus puissant de la plante ne m’inspire pas confiance et je continue à penser que le slogan de Google Don’t be evil [4] est une véritable plaisanterie.
Alors au lieu de vous conseiller de passer à Bling, je vais vous expliquer comment faire votre propre moteur de recherche.
Ce billet décrit la mise en place d’un moteur de recherche sous Debian GNU/Linux basé sur Nutch [5].
Bref, si vous n’avez pas cette infrastructure à votre disposition ce n’est pas la peine d’aller plus loin ![]()
Bon d’accord, vous voulez simplement un moteur de recherche personnel?
Un seul serveur avec les caractéristiques suivantes :
C’est bien plus abordable ?
En mettant en place mon propre moteur de recherche, je voulais obtenir les fonctionnalités suivantes :
Néanmoins, je dois faire une croix sur :
On pourrait dire que Nutch est un moteur de recherche de l’époque “web 1.0″. En effet, il ne contient pas d’algorithme d’Intelligence Bolchevique^Wcollective [8] comme la plupart des moteurs de recherche. Cela signifie que seul le Page rank [9] est utilisé et que les votes des utilisateurs ne sont pas pris en compte. Il est aussi plus sensible au Spamdexing [10].
![]() |
L’architecture d’un moteur de recherche est assez simple, vous avez besoin :
|
Voici les étapes nécessaires pour faire fonctionner la version 1.0 Nuch sur une machine Debian GNU/Linux [13] version “lenny”.
Vous avez besoin des composants suivants :
# apt-get install tomcat5.5 tomcat5.5-admin tomcat5.5-webapps sun-java6-jre
Configurer le JRE par default :
# update-alternatives --set java /usr/lib/jvm/java-6-sun/jre/bin/java
C’est une application en Java, que je place dans le repertoire opt :
# cd /opt
# wget http://mirror.mkhelif.fr/apache/lucene/nutch/nutch-1.0.tar.gz
# tar xzf nutch-1.0.tar.gz
# ln -s nutch-1.0 nutch
# mkdir nutch/urls
# mkdir nutch/crawl
# chown tomcat55: nutch-1.0
La configuration du moteur de recherche se trouve dans le fichier conf/nutch-default.xml, vous disposez de votre fichier conf/nutch-site.xml, spécifique à votre instance. Les variables intéressantes sont :
Votre moteur de recherche doit avaler une quantité de donnée importante avant de pouvoir faire une recherche pertinente.
Voici quelques sources pour l’initialiser.
Il existe de très bons annuaires complets comme le projet Open Directory Project [14].
Dont l’ensemble des données sont disponibles au format RDF et téléchargeables librement : http://rdf.dmoz.org/rdf/ [15].
Par contre, attention ce fichier référence 4 446 480 sites web et vous allez avoir besoin de beaucoup de place pour les référencer tout ce contenu.
Voici la procédure pour utiliser l’annuaire DMOZ avec Nutch :
$ cd /opt/nutch
$ mkdir urls
$ wget http://rdf.dmoz.org/rdf/content.rdf.u8.gz -O urls/content.rdf.u8.gz
$ gunzip urls/content.rdf.u8.gz
$ bin/nutch org.apache.nutch.tools.DmozParser urls/content.rdf.u8 > urls/dmoz
$ bin/nutch inject crawl/crawldb urls/dmoz
Injector: starting
Injector: crawlDb: crawl/crawldb
Injector: urlDir: urls/dmoz
Injector: Converting injected urls to crawl db entries.
Injector: Merging injected urls into crawl db.
Injector: done
Une autre source pour initialiser le moteur de recherche est d’utiliser les adresses contenues dans votre marque-page. Le principal avantage de cette technique est la faible quantité de données à analyser et une pertinence de recherche accrue.
Pour ce faire, vous devez exporter votre marque-page au format HTML (pour Mozilla Firefox) et en extraire les adresses de la manière suivante :
$ cd /opt/nutch
$ grep "A HREF=\"http" bookmarks.html | cut -d '"' -f 2 > urls/bookmarks
$ bin/nutch inject crawl/crawldb urls/bookmarks
Injector: starting
Injector: crawlDb: crawl/crawldb
Injector: urlDir: urls/bookmarks
Injector: Converting injected urls to crawl db entries.
Injector: Merging injected urls into crawl db.
Injector: done
Wikipedia [16] fourni des dumps de sa base de données [17] au format XML. Il est donc possible d’utiliser les URLs des articles de wikipedia comme source.
Voici la procédure pour la version française de Wikipedia, celle-ci contient 897 974 urls.
$ cd /opt/nutch/
$ mkdir urls
$ wget http://download.wikimedia.org/frwiki/latest/frwiki-latest-abstract.xml -O urls/frwiki-latest-abstract.xml
$ grep "<url>" urls/frwiki-latest-abstract.xml | cut -d '>' -f 2 | cut -d '< ' -f 1 > urls/wikipedia-fr
$ bin/nutch inject crawl/crawldb urls/wikipedia-fr
Injector: starting
Injector: crawlDb: crawl/crawldb
Injector: urlDir: urls/wikipedia-fr
Injector: Converting injected urls to crawl db entries.
Injector: Merging injected urls into crawl db.
Injector: done
Une fois que vous avez chargé la base de données avec vos urls, il faut les parcourir afin de les indexer. Cela se fait à l’aide de plusieurs commandes :
Une séquence classique ressemble donc à cela :
bin/nutch generate crawl/crawldb crawl/segments -topN 1000
s1=`ls -d crawl/segments/2* | tail -1`
bin/nutch fetch $s1
bin/nutch updatedb crawl/crawldb $s1
bin/nutch invertlinks crawl/linkdb $s1
bin/nutch index crawl/indexes crawl/crawldb crawl/linkdb $s1
Cette suite de commandes vous permet de parcourir et d´indexer 1000 adresses issues de votre base.
C’est un très bon 1er test pour voir si cela fonctionne.
Une autre commande intéressante est readdb avec l’option stats, qui permet d’obtenir des informations sur le contenu de votre base :
$ bin/nutch readdb crawl/crawldb/ -stats
CrawlDb statistics start: crawl/crawldb/
Statistics for CrawlDb: crawl/crawldb/
TOTAL urls: 3377315
...
min score: 0.0
avg score: 0.13178158
max score: 401.402
status 1 (db_unfetched): 2966337
status 2 (db_fetched): 300008
status 3 (db_gone): 46659
status 4 (db_redir_temp): 27857
status 5 (db_redir_perm): 36454
Une bonne idées serait de mettre en place un système de monitoring sur ces informations pour suivre le déroulement. Par contre, il faut faire attention car la commande prend plusieurs minutes à s’exécuter. (donc hors de question de la placer dans un plugin munin, un mail tous les soirs serait une meilleur méthode).
Vous pouvez tester en ligne de commande le fonctionnement du moteur de recherche :
$ bin/nutch org.apache.nutch.searcher.NutchBean apache
Total hits: 6413
0 20100104001440/http://xmlgraphics.apache.org/fop/
... be part of Apache's XML Graphics project . Demonstration ... goals of the Apache FOP project are to ...
1 20100103201220/http://velocity.apache.org/
... Library Site building Site tools Apache Reference Apache Website How the ASF ... way in its field. Apache
...
Voilà cela fonctionne en ligne de commande, nous pouvons passer à l’interface end user (enfin un moteur de recherche en ligne de commande c’est très pratique aussi
)
Nutch fournir un application pour Tomcat / Jboss. Il suffit de la déployer et de lui indiquer l’emplacement de votre index de la manière suivante :
# cd /opt/nutch
# cp nutch-1.0.war /var/lib/tomcat5.5/webapps
... attendre
# vim /var/lib/tomcat5.5/webapps/nutch-1.0/WEB-INF/classes/nutch-default.xml
... remplacer la value de searcher.dir par /opt/nutch/crawl
Mais aussi modifier la sécurité de tomcat, via le fichier /etc/default/tomcat5.5 en mettant la variable TOMCAT5_SECURITY à no.
Ou bien en créant un fichier policy donnant l’accès au répertoire /opt/nutch/crawl. (c’est plus propre
)
Vous pouvez ensuite redémarrer tomcat et accèder au moteur de recherche via votre navigateur sur le port 8180.
Voici quelques problèmes que j’ai rencontré lors de mes tests de la version 1.0 de Nutch :
Impossible de fusionner deux index, il est nécessaire de re-creer l’ensemble de l’index à chaque fois.
Lorsque trop nombreux sites sont choisis dans la liste des sites à parcourir par le robot d’indexation à l’aide de l’option topN, le programme produit une erreur et le segement produit est corrompu. (c’est pour cette raison que je limite le nombre de site dans un segment à 5000)
Une fois le moteur de recherche mise en place, il faut maintenir l’index à jours. Pour cela, j’ai mis en place un simple script de crawl avec cron qui se lance tous les soirs :
#!/bin/sh
bin/nutch generate crawl/crawldb crawl/segments -topN 5000
s1=`ls -d crawl/segments/2* | tail -1`
bin/nutch fetch $s1
bin/nutch updatedb crawl/crawldb $s1
bin/nutch invertlinks crawl/linkdb $s1
et un autre qui re-créer l’index :
#!/bin/sh
rm -rf crawl/indexes/
bin/nutch index crawl/indexes/ crawl/crawldb/ crawl/linkdb/ crawl/segments/*
La principale difficulté de ce projet est l’indexation d’une énorme quantité de données avec des moyens techniques très limité.
Voici donc quelques idées pour optimiser l’indexation de votre moteur de recherche.
Vous pouvez ajouter l’adresse du serveur mandataire de votre FAI dans le fichier conf/nutch-site.xml :
<property>
<name>http.proxy.host</name>
<value>proxy.free.fr</value>
</property>
<property>
<name>http.proxy.port</name>
<value>3128</value>
</property>
Note : On me signale dans l’oreillette, que mon FAI à fermer son proxy [18] à cause d’une sombre histoire de Haute Autorité De l’Ouverture Postale Inopinée [19].
Vous avez besoin de mettre en place un serveur cache DNS locale qui prend en charge les requêtes du robot. Vous pouvez faire cela avec ISC BIND [20] ou bien pdnsd [21].
Vous pouvez aussi augmenter le nombre de processus utiliser par le robot d’indexation en modifiant les variables du fichier de configuration :
Pour plus d’informations, vous pouvez voir sur le wiki du projet : OptimizingCrawls [22].
Voici quelques astuces pour intégrer Nutch à votre architecture.
Pour Mozilla Firefox, le système de plugin permet d’inclure votre propre moteur de recherche [23].
Pour faire cela, il faut placer le fichier nutch.xml [24] dans votre profile Firefox : ~/.mozilla/firefox/*.default/searchplugins (en remplacant par l’addresse de votre instance ) .
Vous pouvez modifier la configuration de votre DNS pour résoudre le domaine google avec l’adresse de votre moteur de recherche. (Ouais, je sais Net Neutrality, toussa
). En modifiant la feuille de style de l’interface web certains utilisateurs ne verront surement pas la diffèrence.
Vous allez me dire. Héberger son propre moteur de recherche chez soit, quelle drôle d’idée ![]()
Je pousse, le concept d’Auto-hébergement [25] au maximum, mais il est clair que j’ai fait cette article “Just for fun”, car même si je ne peut indexer que 5000 sites par jours (le script fonctionne durant les heures creuses) , soit 1 825 000 en un an, je vais avoir beaucoup de mal à indexer les 4 446 480 urls de DMOZ.
Voici quelques références intéressantes sur le sujet :
Vous avez maintenant à votre disposition un moteur de recherche personnel.
Et vous êtes libre de rechercher des choses sans que personne ne puisse le savoir ![]()
L’étape la plus dure est de se passer de l’utilisation google ![]()
Si vous voulez aller plus loin dans le monde des moteurs de recherche libre vous pouvez intégrer Nutch avec Solr [34], comme décrit dans cette article : Using Nutch with Solr [35].
Afin d’obtenir un moteur de recherche professionnel pour une entreprise. (principalement pour éviter la fuite d’information).
Ou bien si vous si êtes intéressé par un produit similaire aux Solutions d’entreprise [36] de Google.
Pour finir, la petite cerise sur la gâteau, comme Nutch utilise Hadoop [37], il scale comme un troupeau éléphants
Article printed from Christophe Nowicki: http://www.csquad.org
URL to article: http://www.csquad.org/2010/01/11/nutch/
URLs in this post:
[1] Google CEO Eric Schmidt Dismisses the Importance of Privacy: http://www.eff.org/deeplinks/2009/12/google-ceo-eric-schmidt-dismisses-privacy
[2] Liu Xiaobo: http://en.wikipedia.org/wiki/Liu_Xiaobo
[3] moteur de recherche censuré: http://news.google.cn/news?q=Liu%20Xiaobo&hl=zh-CN&ie=UTF-8&ned=ccn&tab=Hn
[4] Don’t be evil: http://en.wikipedia.org/wiki/Don%27t_be_evil
[5] Nutch: http://lucene.apache.org/nutch/
[6] Image: http://www.csquad.org/wp-content/uploads/2010/01/140px-Google’s_First_Production_Server.jpg
[7] Raptor: http://en.wikipedia.org/wiki/Western_Digital_Raptor
[8] Intelligence Bolchevique^Wcollective: http://fr.wikipedia.org/wiki/Intelligence_collective
[9] Page rank: http://fr.wikipedia.org/wiki/PageRank
[10] Spamdexing: http://fr.wikipedia.org/wiki/Spamdexing
[11] Web crawler: http://en.wikipedia.org/wiki/Web_crawler
[12] Apache Lucene: http://lucene.apache.org/
[13] Debian GNU/Linux: http://www.debian.org/
[14] Open Directory Project: http://www.dmoz.org/
[15] http://rdf.dmoz.org/rdf/: http://rdf.dmoz.org/rdf/
[16] Wikipedia: http://fr.wikipedia.org
[17] base de données: http://en.wikipedia.org/wiki/Wikipedia_database
[18] mon FAI à fermer son proxy: http://www.freenews.fr/spip.php?article7300
[19] Haute Autorité De l’Ouverture Postale Inopinée: http://fr.wikipedia.org/wiki/Loi_Cr%C3%A9ation_et_Internet
[20] ISC BIND: https://www.isc.org/products/BIND/
[21] pdnsd: http://www.phys.uu.nl/~rombouts/pdnsd.html
[22] OptimizingCrawls: http://wiki.apache.org/nutch/OptimizingCrawls
[23] propre moteur de recherche: https://developer.mozilla.org/en/Creating_OpenSearch_plugins_for_Firefox
[24] nutch.xml: http://www.csquad.org/wp-content/contrib/nutch.xml
[25] Auto-hébergement: http://fr.wikipedia.org/wiki/Auto-h%C3%A9bergement
[26] The Anatomy of a Large-Scale Hypertextual Web Search Engine: http://infolab.stanford.edu/~backrub/google.html
[27] La réponse de Bruce Schneier: http://www.schneier.com/blog/archives/2009/12/my_reaction_to.html
[28] tutorial: http://lucene.apache.org/nutch/tutorial8.html
[29] Wiki: http://wiki.apache.org/nutch/FrontPage
[30] tee short: http://www.bustedtees.com/skynet
[31] Installation de Nutch 0.8.1 sous Ubuntu 6.10: http://goupil.arnaud.free.fr/nutch.php
[32] Frutch: http://frutch.blogspot.com/
[33] Motrech: http://www.motrech.com/
[34] Solr: http://lucene.apache.org/solr/features.html
[35] Using Nutch with Solr: http://www.lucidimagination.com/blog/2009/03/09/nutch-solr/
[36] Solutions d’entreprise: http://www.google.com/enterprise/intranet_search.html
[37] Hadoop: http://hadoop.apache.org/
Click here to print.
Copyright © 2009 Christophe Nowicki. All rights reserved.