J'ai donc pensé qu'indexer une bonne partie de notre domaine pourrait s'avérer for utile.

Etat initial

Nous disposons d'un petit (1GHz, 521Mo de RAM) PC sous CentOS 5, qui nous sert déjà de serveur web/samba/impression/polices.
J'ai donc cherché dans les dépôts de base un moteur de recherche. Le seul que j'ai trouvé, ht://Dig n'est plus maintenu depuis 2004. Je me suis donc tourné vers nutch, projet hébergé par Apache. C'est une application en java, qui nécessite le jre officiel. Il n'y a qu'un tar à télécharger, mais 2 fonctions bien différentes.

Le crawl

C'est la partie la plus complexe et gourmande. On peut commencer par suivre la procédure indiquée sur le wiki officiel. En résumé :

  • Compléter la section http.agent.name de $NUTCH_HOME/conf/nutch-default.xml
  • Modifier le fichier $NUTCH_HOME/conf/crawl-urlfilter.txt pour restreindre la recherche au domaine intranet
 +^http://(a-z0-9*\.)*mon.domaine/ #pour les liens avec le nom de domine
 +^http://^\.*/  # pour les noms de machine sans domaine
  • Créer un fichier avec les urls de départ.
  • Lancer le crawl
  $NUTCH_HOME/bin/nutch crawl mesurls.txt -dir crawl -depth 3 -topN 50

Le moteur de recherche

Maintenant qu'on a réussi son indexation, il n'y a plus qu'à installer le moteur de recherche. Il faut avoir installé et lancé le service tomcat5. Ensuite on copie $NUTCH_HOME/nutch-1.0.war dans /var/lib/tomcat5/webapps.
On relance tomcat5, nutch s'installe. Il n'y a plus qu'à modifier searcher.dir par $NUTCH_HOME/crawl dans /var/lib/tomcat5/webapps/nutch-1.0/WEB-INF/classes/nutch-default.xml, re-relancer tomcat5, et voilà! vous pouvez lancer votre première recherche sur http://votreserveur:8080/

Problèmes

Nutch est TRES gourmand. Java phagocyte la RAM. D'où de fréquentes erreurs avec "heap size" ou "out of memory". Quand on cherche un peu sur internet, on voit que nutch a plutôt été pensé pour des clusters de serveurs, qui n'ont rien à voir avec un Nec Powermate...
Après avoir augmenté tous les paramètres de mémoire des fichiers de conf, la seule solution que j'ai trouvée est :

  • Exécuter le crawl sur un autre machine.
  • Faire un crawl pas à pas comme sur cet exemple
  • Et surtout sauter l'étape mergesegments pour la remplacer par une simple copie des segments. L'indexation se passe toujours aussi bien.

Et depuis, c'est le bonheur, je trouve de la doc de tous les cotés sur mon intranet !