Si vous avez déjà utilisé Sphinx vous avez essayé une des 5 config que je vais présenter. Chacune correspond à un type de projet. Voyons les 2 premières en détail.
Avant de commencer il y a quelques questions à se poser
- Combien de données doivent être cherchables ?
- A quelle vitesse gonfle votre liste de données ?
- Quelle est votre capacité système (nombre de CPUs, mémoire, réseau)?
- Combien de "recherche" votre système doit-il encaisser ?
Dans chaque solution seront reprises les avantages et inconvénients.
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)








Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire