Un simple index

La configuration d'un simple index est la plus simple. Il convient à la plupart des sites Internet et des projets avec un maximum de 100.000 éléments. Les contenus du style messages, commentaires, ou des pages peuvent être mis dans un index unique à l'aide d'une simple requête SQL pour obtenir les champs de données nécessaires. Pour avoir index toujours à jour, vous devrez mettre en place un cron pour indexation complète. Voilà c'est déjà fini pour l'index simple.

Avantages:

  • Simple à configurer
  • Simple à utiliser

Inconvénients:

  • Nécessite une réindexation complète de données à chaque fois.
  • Avec des gros projets (> 100.000 documents) la ré-indexation peut prendre du temps, ce qui rend cette configuration inadéquate.

Approche avec Main + delta

C'est une configuration avec deux index.

L'objectif de cette approche est de faire des mises à jour rapides des index aussi facilement que possible même pour les grandes quantités de données.

Lorsque vous avez beaucoup de documents et que la quantité de données ne cesse de croître avec des mises à jour de contenu fréquentes (par exemple, un grand forum ou un site Web de news), il est préférable de mettre en œuvre ce qu'on appelle une structure Main + Delta qui utilise deux index.

Main

comme index de référence contenant la plupart des données - il ne sera pas mis à jour très souvent et prendra de l'ampleur au fil du temps.

Delta

comme index supplémentaire qui ne contiennent que les informations les plus récentes qui ne sont pas encore couvertes par l'indice principal pour le moment.

Pour nous assurer d'avoir les derniers documents consultables nous avons besoin de reconstruire les index très souvent. Et avec de grandes quantités de données, il n'est pas possible d'effectuer une réindexation complète car cela peut prendre plusieurs heures voire plusieurs jours. Mais avec cette configuration, nous devons reconstruire seulement l'index Delta fréquemment, ce qui aura secondes ou minutes, et votre moteur de recherche aura toujours de nouvelles données.

Pour conserver l'index delta assez petit, vous devez l'ajouter à l'index principal et le réinitialiser périodiquement.

Depuis la version 0.9.9 Sphinx vous pouvez fusionner les index de sorte qu'il n'est pas nécessaire de reconstruire l'indice principal à chaque fois - il vous suffit de fusionner Main et Delta.

Pour faire une recherche, vous devrez interroger les deux index:

<?php
$sphinxClient->Query(“your search query”, “main delta”);
 
?>

Ou créer un index distribué qui fera la jointure pour vous

[sphinx]
index mon-index-complet
{  
type = distributed  
local = mon-index-principal
local = mon-index-delta
}  

Avantages:

  • reste très simple à configurer
  • mises à jour d'index rapides

Inconvénients:

  • Nécessite un peu plus de temps pour configurer plus
  • Nécessite de merger ou re faire le main
  • Nécessite un stockage pour l'id du dernier doc du main (souvent une table mysql)

Voilà pour les 2 premières techniques, Il me reste à décrire

  • Indexes Multiples
  • Services Multiples
  • Serveurs Multiples

Mais ca viendra plus tard

Je rééditerai aussi ce post pour ajouter des exemples de config et des sources php. (et corriger mes insupportables fautes)