Kamelot Blog

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

mardi 26 juin 2012

mar
26
juin '12

Sphinx : éléments de base.

Plusieurs fois j'ai déjà parlé de sphinx, mais je me rends compte que je n'ai pas une seule présentation "de base".

Je n'ai pas l'intention de refaire ce qui existe déjà mais je voulais présenter le workflow général.

Je trouverai très chouette que si quelqu'un connait elasticSearch, ou solr, ou autre ..., il fasse de même que je puisse le référencer pour comparaison.

SphinxSearch propose un outil d'indexation : indexer

Cet outil va lire 3 des 4 sections du fichier de configuration

  1. Les indexs
  2. Les sources
  3. Les paramètres de l'indexation

Les index sont de 2 types.

  • lié à une source
  • agrégateurs de plusieurs autres indexes (locaux ou distant) ; On les appelle distribués

Une source c'est la définition qui permet d'aller chercher l’information à indexer et une définition de chaque champs.

Ca peut-être une requête SQL sur Mysql ou Posgress

Ou sur un contenu XML.

Le Xml est surtout pensé pour en faire un format d’échange pour en fin de compte pouvoir indexer, tout ce qui peut être transformé en XML.

Même si je ne connais pas très bien lucene et solr, c'est sur le point précédent que ces derniers sont plus fort que sphinx. Ils sont plus adaptés pour indexer des sources hétérogènes, des documents.

Après avoir executé l'indexation on a donc "lu" la source et fabriqués des indexs.

On a un premier niveau pour exploiter ces indexs

Faire une recherche

On peut utiliser search

Celui-ci attaque directement l'index. Sans passer par le service. C'est donc très utile pour tester ses index mais il ne faut en aucun cas envisager une utilisation en production.

En outre, puisqu'il n'utilise pas searchd, il ne permet pas d'utiliser les indexs distribués

On va donc lancer ce service : searchd

Celui-ci va utiliser 2 sections du fichier de configuration.

  1. Les indexs
  2. Les paramètres du service.

Le service va charger en mémoire les indexs et les rendre disponible via une api sur un port donné.

Puisqu'il y a service, il y a client

Jusqu'à présent j'ai vu 3 clients

Il y en a d'autres puisqu'il y a ruby, c++, perl, Haskell, C#, mais aussi des plugins tout prêts pour Yiiframework, Drupal, Symfony, phpBB, MovableType, MediaWiki, Phorum, Thinking Sphinx, Rails,... le tout à trouver sur la page plugin

Avec le client choisi on va pouvoir interroger l'index, servi localement ou sur le réseau par searchd

On récupère alors une liste d'id (uniques) et la valeur des attributs. (pas les textes)

On peut alors faire une jointure avec la source pour retrouver les données dans leur dernier état.

mercredi 20 juin 2012

mer
20
juin '12

Ce 30 juin, on retire une seconde, et paf pour ceux qui ont mal codé de manière trop simpliste.

La rtbf titre : "Le 30 juin, nous gagnerons une seconde de vie

En pratique 30 juin prochain, après 23h59m59s, il sera 23h59m60s, avant de passer, la seconde suivante, le 1er juillet à 00h00m00s.

Donc ceux qui ont utilisé des intervalles calculés en secondes, du style 24*60*60 ... ben leur 13h00m00 du 30 juin devient 12h59:59 le 1er Juillet. Pas propre

C'est en fait le même problème que la mauvaise gestion de l'heure d'été, d'hiver et des 29 février.

Donc si vous ne travaillez pas sur une "durée" mais sur une "période", utilisez les bonnes fonctions date de php.

jeudi 7 juin 2012

jeu
07
juin '12

Réorganiser une classe.

Pour mon premier post depuis un bon bout de temps, je viens avec une question.

Comment organisez vous vos méthodes dans vos classes ?

  • toujours ajouter la dernière en bas ?
  • le construct et le destruct en haut ?
  • tous les setters ensembles ?
  • ou chaque setter à coté de son getter ?
  • triés alphabétiquement ?
  • ...

Et surtout comment organisez-vous vos classes ?

Je veux dire faites vous comme moi de bêtes couper/coller ? ou avez-vous une astuce ?

Personnellement, comme j'utilise comme on utilise du ZendStudio et du aptana, ca me plairait bien d'avoir un outil qui afficherait la liste des méthodes et propriétés comme "outline" mais avec lequel il serait possible de faire un drag&drop dans la liste pour que le code se mette à jour pour reproduire cet ordre.

Merci pour vos réponses....

Tags