Indexation multi-lingues avec Lucene et Solr

Publié le mars 9, 2010

solrUn des challenges lors du passage de Fast ESP à Solr pour le moteur Hurisearch a été de pouvoir indexer et rechercher des documents dans un très grand nombre de langues. Plus de 60 langues sont répertoriées avec par exemple par ordre décroissant d’importance : Anglais, Espagnol, Français, Allemand, Flamand, Russe, Arabe, Slovène, Hébreux, Persan (Farci), Coréen, Tchèque, Chinois, Norvégien, Japonais, Roumain, Catalan, Hongrois, Géorgien, …

Lucene et différentes contributions permettent de disposer d’analyzer et même de « stemmer » pour un grand nombre de ces langues. Avec Solr, le seul moyen pour associer le bon analyzer à chaque langue est d’avoir autant de champs dans le shema qu’il y a de langues possibles et d’associer à chaque champ le bon analyzer. Pour Hurisearch, cela aurait donc fait 60 champs pour le contenu des documents et 60 champs pour les titres. L’autre problème dans ce cas est également de ne pas pouvoir chercher lors d’une même requête dans la totalité des langues  simultanément. Autant dire que ces contraintes et limitations ne sont pas acceptables.

Il est impératif d’utiliser un champ unique pour toutes les langues. Comme il est possible d’associer un seul analyzer à ce champ, ce dernier doit donc s’adapter à la langue du texte en cours d’indexation et à la langue de la requête (il faut également traiter la requête en fonction de sa langue). Deux analyzers ont donc été développés afin de traiter le texte au mieux en fonction de sa langue : un analyzer pour indexer le texte sans le « stemmer » et un en le « stemmant » lorsque cela est possible (voici une explication en anglais de ce qu’est un stem).

Le dernier point à résoudre a été de trouver comment indiquer à l’analyzer la langue du texte qu’il va traiter. Avec Lucene, cela n’est pas un problème car les constructeurs (classes java) des analyzers  peuvent posséder une paramètre qui indique la langue. Par contre, avec Solr, cela n’est pas possible, les paramètres passés aux constructeurs des analyzers sont figés dans le fichier shema.xml. La solution a donc été de passer cette information en en-tête du texte lors de l’indexation et de la requête lors de la recherche.

En conclusion, nous avons été en mesure d’indexer un grand nombre de langues tout en pouvant rechercher simultanément dans tous les documents quelque soit leur langue et en offrant la possibilité de retrouver les mots indépendamment de leurs formes (genre, nombre, conjugaisons, …). Aujourd’hui, Hurisearch crawle 5400 sites Web sites qui représentent plus de 10 millions de pages indexées pas Solr.

Laissez un commentaire

Navigation

Categories
  •  Technique (35)
  •  Lucene / Solr (21)
  •  Moteur de recherche (19)
  •  Sites à découvrir (12)
  •  Web 2.0 (12)
  •  Productivité (10)
  •  Debian (6)
  •  Flux RSS (6)
  •  Web (6)
  •  Hébergement (3)
  •  Non classé (3)
  •  Wordpress (3)
  •  Freelance (2)
  •  Référencement (2)
  •  vmware (2)
  •  Mac OS (1)
  •  Réseaux (1)
  • Tags
  •  Solr (14)
  •  Lucene / Solr (11)
  •  RSS (5)
  •  Wordpress (5)
  •  java (5)
  •  tomcat (4)
  •  vmware (4)
  •  Crawler (3)
  •  Debian (3)
  •  OPML (3)
  •  Crossfeeds (2)
  •  PHP (2)
  •  Plugins (2)
  •  apt (2)
  •  mercurial (2)
  •  moteur de recherche (2)
  •  mysql (2)
  •  Agrégateur (1)
  •  Bitbucket (1)
  •  CAS (1)
  •  Debugbar (1)
  •  ESXi (1)
  •  Emilie Ogez (1)
  •  Fast (1)
  •  Firebug (1)
  •  Firefox (1)
  •  Flux RSS (1)
  •  Freelance (1)
  •  Google Chrome (1)
  •  Huridocs (1)
  •  Hurisearch (1)
  •  IE (1)
  •  IETester (1)
  •  Migration Day 2008 (1)
  •  Ogez (1)
  •  Poll (1)
  •  Référencement (1)
  •  SEO (1)
  •  Savoirs en réseau (1)
  •  Sondage (1)
  •  SurveyGizmo (1)
  •  WP-Poll (1)
  •  aiderss (1)
  •  ant (1)
  •  apache (1)
  •  aptitude (1)
  •  backup (1)
  •  bande passante (1)
  •  base de registre (1)
  •  catégorie (1)
  •  configuration (1)
  •  curl (1)
  •  dell (1)
  •  detection langue (1)
  •  dojo (1)
  •  débit (1)
  •  etch (1)
  •  extjs (1)
  •  framwork (1)
  •  gateway (1)
  •  git (1)
  •  google (1)
  •  hg (1)
  •  hosted (1)
  •  hosting (1)
  •  iis (1)
  •  indeed (1)
  •  javascript (1)
  •  jdk (1)
  •  jquery (1)
  •  log (1)
  •  magpie (1)
  •  mg4j (1)
  •  mod_auth_cas (1)
  •  mod_cas (1)
  •  mootools (1)
  •  morphologique (1)
  •  n-gram (1)
  •  ngp (1)
  •  ngram (1)
  •  ngramj (1)
  •  nightly build (1)
  •  nuage de tags (1)
  •  openSSL (1)
  •  openSUSE (1)
  •  optimisation (1)
  •  pagerank (1)
  •  patch (1)
  •  performances (1)
  •  perl (1)
  •  phpCAS (1)
  •  ping (1)
  •  pipeline (1)
  •  podcast (1)
  •  presse-papier (1)
  •  prototype (1)
  •  saas (1)
  •  scriptaculous (1)
  •  serveur (1)
  •  shrink (1)