Kamelot Blog

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

samedi 31 décembre 2011

sam
31
dec '11

Sphinx : Tri par titre en multi index ...

Puisque sphinx ne connaît que des valeurs scalaires pour faire un tri alphabétique, il faut transformer les chaînes de caractères en nombre.

sql_attr_str2ordinal sert à ça.

Sauf que .... ce qu'on stocke c'est un n° d'ordre dans l'index, c'est pas une représentation numérique de la chaîne.

Le nom est bien 2ordinal et pas 2num

Pour confirmation cet extrait de la doc :

9.1.20. sql_attr_str2ordinal
(...)
When indexing ordinals, string values are fetched from database,
temporarily stored, sorted, and then replaced by their respective ordinal 
numbers in the array of sorted strings.
So, the ordinal number is an integer such that sorting by it produces
the same result as if lexicographically sorting by original strings.
by string values lexicographically.

Donc pour les recherches sur plusieurs indexs ça coince.

En effet si ma chaîne est 3eme dans un index, ca ne veut pas dire qu'elle serait avant celle qui est 3ème, 5ème,100ème dans l'autre index.

Bref en multi index, ça foire.

C'est un problème facile à repérer parce que vos résultats arrivent en petites séries de blocs triés. Comme un 45T dont l'aiguille saute :)

C'est bien dommage parce qu'une manière d’accélérer vos indexations et vos recherches c'est de découper les indexs en "portions".

Que faire quand on veut profiter des avantages de ce découpage et des possibilités de trier alphabétiquement ?

Solution depuis Sphinx 1.10

Allez Louya, on a un nouveau type de champs. coûteux mais efficace. sql_field_string

En créant un attribut de ce type, et en l'utilisant dans "sort" sur vos chunk... ca marche.

Et en bonus, vous pouvez en récupérer le contenu. C'est-à-dire que si l'info vous suffit , vous ne devez plus aller la rechercher dans votre source.

Solution avant Sphinx 1.10

Transformez vous même la chaîne en nombre :(

Si vous utilisez une source Mysql, j'ai une solution. Bof bof pour ca. Utiliser la fonction HEX de mysql.

J'ai expliqué cela il y a quelque temps : StrToNum en Mysql ou comment convertir une chaine en nombre ?


Reste encore 2 autres problèmes à régler mais ça sera pour une autre fois.

  • avant de trier il faut "TRIM" tous les espaces blancs. Et ca, Mysql ne le fait pas aussi bien que php. En effet mysql ne retire que les ASCII 32.
  • pour trier il faut une bonne collation. Et ca je n'ai pas encore trouvé comment faire en sorte que sphinx s'en sorte aussi bien que Mysql
le "œ"  est-il bien entre "n" et "p" ?

lundi 14 février 2011

lun
14
fév '11

Paramètre commentaire de SphinxClient::query

Je fait pas mal de tests sur sphinx pour le moment.

En lisant PHP: SphinxClient::query - Manual

[php]
public array SphinxClient::query ( string $query [, string $index = "*" [, string $comment = "" ]] )

Mon attention a été attirée par le 3ème paramètre. (supporté par sphinx depuis la Version 0.9.8 du 14 juillet 2008)

En fait ce paramètre accepte une chaine de caractère qui se retrouve dans le query.log

[php]
$result = $hSphinx->query('leMotQueJeCherche', '*', 'mon commentaire');

Ce paramètre existe aussi en SphinxSE mais ce n'est pas documenté,

Il suffit d'ajouter ';comment=mon test' dans la chaine query,

query='leMotQueJeCherche;comment=mon commentaire';

Et voila dans le query.log

[query.log] [Mon Feb 14 14:54:00.216 2011] 0.091 sec [any/0/rel 14094 (5000,99)] [*] [ios=0 kb=0.0 ioms=0.0 cpums=91.5] [mon commentaire] leMotQueJeCherche

Ce qui est très pratique avec un tail -f et un grep pour ne voir que les rêquetes faisant partie du test,

Lire la suite...

samedi 6 novembre 2010

sam
06
nov '10

Comment voir les fichiers .htaccess dans l'explorateur de Zend Studio (ou Eclipse) ?

Vous cliquez sur la flèche en haut a droite de l'explorateur


puis il faut décocher la case qui dit de ne pas afficher les fichier de type .*


source : chrismacpherson.com

Screenshots réalisés avec FastStone Capture pas "libre" mais dispo sur liberkey

jeudi 20 août 2009

jeu
20
aoû '09

mon checkout ne fonctionne pas via cron

J'ai mis en place un serveur de développement avec un script qui checkout le code.

Pour ce faire j'avais fait un script shell qui fait tout mes checkout générait quelques infos de logs.

Ce script appelé régulièrement par cron devait garder mon serveur de test synchrone.

Problème...

quand j'appelais ce script en direct tout fonctionnait correctement, mais le cron lui ne mettait jamais à jour.

Je me suis alors décidé de regarder les mails envoyés par cron et j'y ai vu ceci

 svn: Can't convert string from 'UTF-8' to native encoding

Une recherche sur le web m'a permi de trouver cet article et la lumière fut.

Ce qui se passe c'est que sur le svn il y avait dans un sous-répertoire des noms de fichier contenant des caractères utf8 !!!.

un set en console m'indiquait LC_CTYPE=en_US.UTF-8 mais pas en cron.

Solution

Dans mon script appelé par le cron, J'ai juste ajouté

export LC_CTYPE=en_US.UTF-8

à mon script et tout à fonctionné correctement

mercredi 16 janvier 2008

mer
16
jan '08

Extraire les photos des powerpoints

Je reçois souvent des fun mails avec un powerpoint contenants une série de photo humoristiques. Perso je préfère les en extraire et les garder dans un dossier image-fun.

Pour extraire les photos j'ai une technique toute simple.

  1. ouvrir le ppt/pps avec openOffice et enregistrer au format openOffice.
  2. renommer le ficher en changeant son extension en .zip
  3. dézipper

toutes les images sont dans Pictures

mercredi 5 décembre 2007

mer
05
dec '07

Bloc commentaire désactivable

Si au lieu d'écrire vos blocs commentaires comme ceci

<?php 
/*
    echo 'toto';
*/
?>
Vous faites
<?php 
/*
    echo 'toto';
//*/
?>

Il suffit d'ajouter un / devant l'ouverture du bloc pour le réactiver

<?php
//*
echo 'toto';
//*/
?>

Pour le réactiver 2 solutions :
  1. ° retirer le / ajouté
  2. ° ou ajouter un * derrière le / ajouté
<?php
/*/*
echo 'toto';
//*/
?>

L'avantage de cette 2eme solution c'est de "reconnaitre facilement" un bloc commentaire switchable

En effet, vous prendrez vite le réflexe en voyant un /*/* que c'est un bloc switchable, alors que face à un /* vous devez aller vérifier la fermeture du bloc

lundi 20 novembre 2006

lun
20
nov '06

iMacros for Firefox

iMacros for Firefox by iOpus Inc. pour Firefox 1.5 - 2.0.0.*

Voilà une petite extention qui devrait pouvoir aider en phase de test. On peut automatiser son firefox en enregistrant et rejouant une suite de manoeuvres

Il y a plus d'informations ici

... à découvrir

lundi 6 novembre 2006

lun
06
nov '06

PEAR: Encore 1202 fichiers à traduire.

Pour aider,

  1. Consultez cette liste : PEARDOC Revision-check
  2. Cliquez sur le fichier qui vous fait de l'oeil
  3. Traduisez tout sauf les balises mais bon au pire lisez ça
  4. envoyez moi la traduc à moosh@claroline.net ou moosh@php.net

mardi 17 octobre 2006

mar
17
oct '06

OOo la 2.0.4 est dispo en french, mise à jour des langues

Open office 2.0.4 étant dispo en français j'ai voulu l'installer.

Il n'a pas voulu parce que j'avais déjà Open office 2.0.4RC en anglais.

Solution 1 désinstaller la RC, pas cool

Un petit tour sur #fr.openoffice.org et on m'indique la solution 2


Après installation il faut aussi redémarrer complètement OOO, j'ai dû tuer le processus.

Je m'étonnais des 16Mo de l'archive de langue, mais Zefredz a jeté un oeil et me dit que riend que l'help fr désarchivé pèse 24Mo.

vendredi 25 août 2006

ven
25
aoû '06

La commande UNION

Une autre devinette de little Noyes

Voici 2 définitions de tables:

CREATE TABLE `users1` (
`name` varchar(10) default NULL,
`birthday` date default NULL
);

CREATE TABLE `users2` (
`name` varchar(10) default NULL,
`birthday` date default NULL
);
After inserting some data, we get the following row counts:

SELECT COUNT(*) FROM users1;
+----------+
| COUNT(*) |
+----------+
| 15       |
+----------+

SELECT COUNT(*) FROM users2;
+----------+
| COUNT(*) |
+----------+
| 12       |
+----------+
Maintenant voici une requête:

SELECT * FROM users1 
UNION 
SELECT * FROM users2;

Combien de rang y aura-t-il dans le résultat ?
  • exactement 27
  • au minimum 12
  • au minimum 15
  • entre 1 et 27
  • Zero ou plus

Voir la réponse ▼

ven
25
aoû '06

Enigme en mysql

Trouvée sur le A Little Noise
SELECT * FROM theTable;
+----+----------+
| id | data     |
+----+----------+
|  1 | milieu   |
|  2 | premier  |
|  3 | showLast |
+----+----------+

Maintenant trions sur `data`.

SELECT * FROM theTable ORDER BY data;
+----+----------+
| id | data     |
+----+----------+
|  3 | showLast |
|  1 | milieu   |
|  2 | premier  |
+----+----------+

hum??? Peut-être sur le serveur n'a pas compris.

SELECT * FROM theTable ORDER BY data ASC;
+----+----------+
| id | data     |
+----+----------+
|  3 | showLast |
|  1 | milieu   |
|  2 | premier  |
+----+----------+

Que se passe-t-il ? Il assure ne pas avoir switché vers une quelquonque collation inversée.

Voir la réponse ▼

lundi 21 août 2006

lun
21
aoû '06

Concatener malgré des null

SELECT CONCAT('a','foo',null,'bar');

donne NULL parce que c'est son comportement normal.

Si toutefois on désire avoir un retour avec les NULL considérés comme chaînes vides une autre fonction viendra à notre secours.

Lire la suite...

dimanche 20 août 2006

dim
20
aoû '06

Le Soir en ligne - Quatre marques d'oeufs retirés de la vente

Merde j'ai acheté une des Quatre marques d'oeufs retirés de la vente

Heureusement on les a pas mangé.

jeudi 27 avril 2006

jeu
27
avr '06

PHP GOTCHAS!

Traduction de l'article http://devzone.zend.com/node/view/id/168
écrit par John Herren le Vendredi, Avril 21, 2006


Appelez-les obscures, appelez-les injustifiées, appelez-les des "erreurs de newbies."
Quelque soit le nom, vous les avez plus que probablement déclenchées vers le début dans votre apprentissage de codage en PHP par des comportements apparemment impairs ou illogiques du langage.
PHP étant un langage faiblement typé, des choses bizarres qui en découlent peuvent se produire. PHP est un langage facile à reprendre pour le codeur occasionnel

Lire la suite...

Tags