Valiz : Moteur de recherche open-source

Aller au contenu | Aller au menu | Aller à la recherche

Mot clé - requête

Fil des billets - Fil des commentaires

dimanche, juin 10 2007

Authentifier le contenu

Introduction

J'ai déjà évoqué le potentiel de la recherche universelle puis par secteur (bibliographie, évènement, article,...). À présent, je vais évoquer un autre type de séparation : le niveau de qualification d'un site.

Niveau de qualification

De nos jours, tout le monde peut créer un site. Tout le monde peut acheter un nom de domaine. Cela est du à deux paramètres principaux :

  • Le très faible cout d'un nom de domaine et de l'hébergement grand public
  • Le niveau de connaissances requis : nul (il existe des plate-formes de sites, des CMS,...)

Comme tout le monde peut générer du contenu sur internet, on peut y trouver n'importe quoi. Je peux tout à fait écrire sur ce blog un long article sur les risques dû aux transmissions micro-onde dans l'espace sans pour autant m'y connaitre. Un moteur de recherche ne fera pas la distinction entre un hurluberlu et un chercheur qualifié.
Comme le moteur de recherche ne peut faire la distinction, l'internaute qui posera sa requête au moteur de recherche peut très bien tomber sur un article fantaisiste et baser un mémoire dessus...

Distinguer

Dès lors, comment distinguer une page dont le contenu est issu de personnes qualifiées des pages impertinentes ? De mon point de vue, je vois deux types de pages pertinente :

  1. Celles publiées sur le site d'université, hautes écoles,...
  2. Celles diffusées sur le site personnel d'un passionné. Sans que l'auteur soit qualifié, son travail a de la valeur.

Un bot n'a que peu de chance de faire un bon tri sur ces aspects. Un filtre humain doit être appliqué.
Avec un travail communautaire, nous pourrions recenser les nom de domaine appartenant à des universités, hautes écoles, sites de passionnés, etc...

Autres domaines

Dans le même esprit, nous pourrions filtrer les sites des administrations pour chaque pays. Cela pourrait faciliter le recherche de texte de lois, d'informations sur les brevets, sur les entreprises, etc... sans que des sites amateurs viennent s'y emmêler. Tout ceci augmenterait largement la pertinence de certaines requêtes. Qu'en pensez-vous ?

jeudi, janvier 11 2007

Quelle infrastructure pour le meilleur rapport prix/performance/fiabilité ?

Catégories de serveurs

Dans l'infrastructure de Valiz je vois...

  • Les serveurs SQL exploités par ValizBot (liste d'attente, résultats de l'exploration,..)
  • Les serveurs pour nourrir ValizBot
  • Les serveurs matheux qui traitent les résultats obtenus par ValizBot pour pré-formater les résultats et autres algorithmes
  • Les serveurs SQL utilisés pour construire les requêtes
  • Les serveurs Web qui assemblent les résultats SQL et/ou issus du cache
  • Les serveurs de cache
  • Les annexes (serveurs dns, mail, load balancing, monitoring, backup,...)

Bref, c'est toute une famille à concevoir et il faut surtout que ce soit totalement modulable afin de simplifier l'évolution : agrandissement, changement de mode de fonctionnement, ...

On regarde de plus près...

À présent que les catégories de serveurs composants l'infrastructure sont définies, examinons le tout de plus près.

Serveurs SQL de ValizBot

Ces serveurs ne sont sollicités que localement par les serveurs ValizBot pour lui fournir les adresses à explorer, mettre à jour ou à découvrir, il y a d'une part cette liste, mais aussi les résultats des sitemaps, robots.txt et autre, et d'autre part l'index brut : tout ce qui est retenu par ValizBot. Ces bases sont donc énormes mais relativement peu sollicitées.
Au début, cette catégorie pourrait être réunie sur un gros serveur, mais par la suite elle serait probablement répartie sur un ou plusieurs gros NFS (pour cet usage, du SATA II suffirait) avec un gros serveur maître.

Serveurs pour ValizBot

Valiz sera conçu de manière à pouvoir disposer de plusieurs ValizBot simultanément sur la toile. La limite concernant le nombre provient principalement de la catégorie précédente. Ces serveurs n'ont pas besoin de beaucoup de puissance.

Serveurs matheux

Ces serveurs seront en quelque sort le cerveau de Valiz, et un cerveau ça réfléchit vite et avec une bonne mémoire svp ! Ils se servent dans le serveur SQL de ValizBot, traitent les données et les renvoies aux serveurs SQL des requêtes après épluchage.

Serveurs SQL

Là évidemment, plus c'est fort mieux ça, il faudrait également des disques puissants (10 ou 15 krpm), je pense à du SAS/SCSI ou encore à du raptor... Je pense que pour de bonnes performances il faut exploiter plusieurs serveurs par requête sql (il me semble que Google exploite 1000 nodes par requête). Chaque serveur aurait une petite tranche de l'index (10-50 go) et se chargerait de traiter ses données pour les mettre en commun avec les autres par la suite. Il me semble que pgtool fait cela, je vais encore me documenter. Ces serveurs servent également pour tous les services externes proposés par Valiz.

Serveurs Web

C'est la face visible de l'infrastructure pour les utilisateurs : le site (interface de recherche et documentation). Ces serveurs mettent en forme les données récupérées et les affiches. Ils exploitent avant tout le cache et sinon envoie et récupère les données des serveurs sql. Si le cache de la requête n'existe pas ils le crée et le place sur les serveurs de cache.

Serveurs de cache

Comme toutes les autres catégories, il faudra explorer à fond la configuration, mais ça pourrait se résumer à un NFS.

Serveurs annexes

Ces serveurs ne sont pas des bêtes de puissance, mais sont indispensables au fonctionnement de Valiz.

Conclusion

C'était une première ébauche simplifiée de l'infrastructure possible de Valiz, les valeurs fondamentales devraient être : fiabilité, performances et évolutivité.
Bien sûr, tout dépend des moyens à disposition et du succès rencontré.

mercredi, janvier 10 2007

Comprendre les requêtes

Comprendre la requête

Pour s'exprimer, on a recours à divers synonymes, y compris lorsque l'on fait une recherche sur un moteur. Il peut exister des dizaines de très bons résultats indexés mais qui n'utilisent pas le mot-clefs recherché mais plutôt un synonyme. Lorsque l'on parle avec quelqu'un, l'interlocuteur n'a aucun mal à saisir le sens de la phrase ou à comprendre les mots, ce n'est pas toujours le cas des moteurs de recherches, ils recherchent l'expression écrite et c'est tout.

Type de requête

Lors de l'analyse de la requête, il faut commencer par trouver le type de requête :

  • Un auteur ?
  • Une ville ?
  • Un évènement ?
  • Un artiste ?
  • Un objet ?
  • Une phrase ?
  • calcul ?
  • autre ?

Traiter

En fonction du type, les résultats seront adaptés (voir le billet sur les résultats en catégories).
Et si c'est une phrase, une analyse plus poussée serait effectuée pour analyser la famille des mots (adjectif, adverbe, verbe,...) et ses liens avec d'autres familles (synonyme,...). D'ailleurs si vous connaissez des services gratuits qui proposent ce genre de service via API, n'hésitez pas à laisser un commentaire.
Ainsi, des résultats pertinents pourraient être formés. Sur une requête retournant des résultats convenables sur les mot-clefs utilisés, des résultats synonymes ne seraient conseillés qu'en fin de page, sous "annexes" ou "voir aussi..." par exemple.
Par contre, pour une requête ne retournant pas de résultats pertinents, la requête pourrait alors s'étendre aux autres familles des synonymes.
Je pense que le concept pourrait être intéressant, à condition de pouvoir traiter tout ça de manière correcte et rapide...

lundi, janvier 8 2007

Rafraichissement des résultats

Calculer les résultats pour une requête requiert beaucoup de ressources, il serait suicidaire d'appliquer un calcul en temps réel pour chaque requête. Même les plus grands moteurs ne font pas du calcul instantané (et si plus est la base est de 8 milliards de pages...).
Comment économiser les ressources tout en restant le plus possible à jour ?

  • Diminuer l'étendue de la recherche en séparant par thématique et autres flags attribués lors de l'indexation
  • Effectuer des calculs de pertinence permanents en arrière-plan
  • Générer de manière autonome les requêtes courantes
  • Mettre en cache les requêtes effectuées
  • Calcul instantané basé sur les requêtes proches en cache ?
  • etc...

Mais à quelle fréquence mettre à jour le cache ? On pourrait établir des niveaux de popularités/fréquence de nouveautés et ainsi faire des mises à jour toutes les 24/48h voir une fois par semaine. Mais le plus important serait probablement un cache intelligent :

  • Mise à jour lorsque de nouveaux résultats détectés comme pertinents sont ajoutés ou mis à jour dans l'index
  • Requêtes chaudes (actualité, débats, évènement) où les informations évoluent très rapidement : donc mise à jour très fréquentes

Un autre domaine à examiner serait la catégorie actualité des résultats, je pense que le plus pertinent serait de se baser sur les flux rss (pour avoir le plus récent sans avoir à aller le chercher avec valizbot) et cette sous-catégorie serait gérée indépendamment du cache ou alors bénéficierait d'un cache séparé (reconstruit selon le même principe).
Dans la même lancée, nous pourrions nous interroger sur la fréquence de mise à jour par valizbot, la solution la plus simple de se baser sur le couple sitemaps/lastmod, mais ce concept est encore très peu utilisé et souvent de manière incorrecte. Mais ceci fera l'objet d'un autre article...