sphinxsearch : WOOUUAAAA :)

  • Auteur de la discussion Auteur de la discussion raljx
  • Date de début Date de début
WRInaute passionné
j'ai enfin réussi a installer sphinxsearch
C'est un truc de malade !!!!
pour info : 2 sites qui l'utilisent (dailymotion et craiglist)

pour exemple : 1 table de 2,5 millions de lignes avec 17 champs (les bons index et tout et tout) : 0.008 s pour une requête à 3 mots distincts.

les sorties te permettent de trier par pertinence, rubriques ....

Suis sur le cul !!! j'vais pété la rapidité et la pertinence des résultats de mon site avec ca :D :D :D et en plus je récupère des ressources serveurs qui me faisait défaut depuis plusieurs mois.

17 secondes pour indexer l'ensemble des champs utilisés (+ une fonction --merge qui permet d'indexer seulement les nouvelles entrées)

ptain, je recommande +++ quitte à faire (ici peut-être) un tuto et un partage de connaissances...
 
WRInaute passionné
Audiofeeline a dit:
Ça a l'air efficace en effet, ça y est on peut lancer un Google-killer open source alors? :mrgreen:

C'est ce qui m'a étonne en effet, j'avais jamais vu des sorties de resultats aussi rapides (bon je fais un peu peine avec mes 2 millions de lignes / google) ... mais c'est vraiment flagrant par rapport à tous les scripts de moteurs que l'on trouvent sur le net (indexation, ressources serveurs, ...) de + je recupere toutes les ressources serveurs prises par mon moteur de m*r*e sur le site et gagne en pertinence +++

Très peu de tutos explicites sur le net, surtout en terme d'utilisation (beaucoup sont spécifiques à l'installation)

Ca tourne en dédié sur apache et window / un deamon permet l'utilisation php ...

Pour la démo c'est en cours d'implémentation sur mon site donc une fois terminé, vous irez me faire des VU merci :)

Concernant les tutos, y'avais pas un post la dessus pour une créa sur WRI ?
 
WRInaute passionné
Tu peux encore gagner plus en perf en utilisant le package PEAR Sphinx plutôt que l'API PHP fournie.

Sinon oui, monter son script pour l'intégrer demande plutôt de la patience.

Le seul truc où il fait défaut est pour un éventuel classement par "nom" (alphabétique donc) mais quelques fraudes permettent de l'utiliser.

Le truc vraiment génial est, si tu dois linker 2 bases de données différentes pour faire des recherches. Exemple pour WRI, il y a un forum, un blog, un annuaire, tu peux créer 3 indexes et effectuer une recherche globale sur ces 3 indexes en même temps en attribuant des poids différents.

@raljx, si jamais tu n'utilises pas encore les index de type DELTA, tes 17 secondes d'indexations vont te paraître très vite énorme, mais tant que la fonction Live Update de Sphinx ne sera pas là, ça reste une très bonne alternative.

Parmi les sites qui l'utilisent tu as aussi 2 énormes sites (quoique un vient de "fermer") qui sont mininova et PirateBay ;)

L'option de construction automatique de RSS est vraiment excellent aussi car il permet de faire des flux RSS de recherche, le tout sans requête SQL ou presque.

J'avais publié pas mal d'infos sur ce même forum, il n'y a pas de tuto à proprement parlé mais plutôt des conseils de "comment se démerder".
 
WRInaute passionné
c'est une appli qui tourne sous apache / win donc oui c'est un dédié qu'il faut
je prepare le tuto ... mais c'est pointu quand meme :) surtout avec plusieurs tables liées
 
WRInaute accro
raljx a dit:
mais c'est pointu quand meme :) surtout avec plusieurs tables liées
J'attends de voir ton tuto, ce genre d'appli me plait pour un dev en cours. L'installer n'est pas trop difficile mais s'en servir, oui... :-D
 
WRInaute passionné
Bon j'y suis toujours ... l'implémentation ne devrait pas tarder (aujourdhui ou demain grand max) ...
arrg 1mois 1/2 depuis le dernier post ...
 
WRInaute passionné
héhé bien galère en effet, mais une fois que c'est en place c'est comme prendre une bière bien fraîche au soleil ;)
 
WRInaute passionné
@Julia41 : tout fonctionnait a merveille jusqu'à ce que j'efface les datas (via un rm) pour relancer une indexation clean et voila que mes id ne sont plus les memes.

J'ai une requete on va dire classique style (bon elle est un peu plus compliquée que ca)
Code:
SELECT idann,title,groupe,sous,statut FROM matable WHERE conditions...
je respecte donc bien la prcedure puisque le premier champ est un Entier, donc le matches['id'] devrait etre idann et ben non ! et je bloque depuis 2 heures la dessus ...

ma requete sous mysql me retourne les champ que je desire et dans l'ordre ... :x :cry:
 
WRInaute passionné
Il me semble que sphinx stock quelque part une info sur la dernière indexation.
Je viens de trouver un dédié qui l'a je sais même plus afficher l'aide de l'indexer xD
Bon, si je trouve une piste (j'avais fait la même boulette mais moi j'avais fait un MV des datas, pas un rm :P)

Le indexer --all passe pas ?!

Si t'as fait les delta, flush ta table SQL
 
WRInaute passionné
en fait voila la requete complete (le nom des champs a été modifié :))
Code:
SELECT a.Id, a.statut, a.titre, a.descr, a.ville, a.dep,a.group, a.sousgroup, a.idville, a.photo, a.verif, a.type, a.idaut, a.price, v.Cp,aut.energ,aut.km,aut.ann FROM matable1 a, matable2 v, matable3 aut where a.statut = 1 AND a.idaut= aut.idaut AND a.idville= v.idville

ce que je remarque c'est qu'en changeant l'ordre des tables (apres le where) l'ordre d''indexation est différent mais je ne trouve pas la logique ...
 
WRInaute passionné
pas possible, y'a du cache quelques part
j'ai fait une requete sql basique, supprimé les attributs et je me retrouve toujours avec un tableau contenant les attributs posterieurs ... ca y est je commence a devenir cinglé 8O
 
WRInaute passionné
j'ai trouvé :)
un simple searchd --stop puis une relance du deamon sphinx et c'est rentré dans l'ordre :\
va maintenant falloir penser à tester le deamon régulièrement car s'il saute plus de moteur ...

merci Julia41 pour ton interet ^^ et une reco pour juju
 
WRInaute passionné
Perso je faisais un cron de "nettoyage" toute les nuits mais je t'avouerais que je savais plus à quoi il servait.

Généralement je faisais un :
update avec les index delta toutes les 10 minutes la journée (j'avais réussi à frauder avec la création d'un .txt vide en php et si présent on updatait ou non) en delta bien sûr (je payais au traffic et cette requête consommait 3Go de BP en --all).
Un gros --all à 3/4h du matin avec un restart du démon qui avait des petites fuites mémoires à l'époque (mais j'étais sous FreeBSD donc peu de retours).

Si jamais tu utilises l'API php, regarde du côté de PECL qui offrent des performances encore meilleures.
 
L
lenono
Guest
Bonjour,

Ayant suivi ce post de près, je me permets de vous donner un lien sur lequel j'ai présenté mon installation sphinxsearch (sur debian lenny) :

http://forum.ovh.com/showthread.php?p=360210

Il faut reconnaître que c'est bestial, tant en performance "temps" qu'en performance "qualité de recherche".
Le tout est une question d'adaptation à ses propres besoins.

Maintenant, j'avoue que je galère un petit peu sur l'utilisation de la libstemmer...
(Si Julia41 s'y connait....)

Bonne journée,

Arnaud
 
WRInaute passionné
content pour toi sacré grenouille

enfin ton moteur de recherche en sera un ! déjà qu'avant, il retournait des conneries, mais depuis il est devenu pertinent, et maintenant rapide !
je ne ferais donc plus crasher tes serveurs !!
 
WRInaute passionné
ta la haine d'avoir perdu ton PR ?

c'est pas beau les achats de liens, je te l'avais dit

enfin une preuve concrète que mon spam report fonctionne :-) :-) :-)
 
WRInaute passionné
lenono a dit:
Maintenant, j'avoue que je galère un petit peu sur l'utilisation de la libstemmer...
(Si Julia41 s'y connait....)

J'avais déjà fouiné là dessus (si c'est bien une lib qui permet de faire un "did U mean..").
Perso j'ai utilisé la fonction "build stop word" de sphinx pour me sortir une liste de "mot à ignorer" très "grasse" (environ 12000 mots). J'ai créé un dico pspell avec ces 12'000 mots, et après j'utilise une petite fonction de vérification d'orthographe.
Prison Braek me retournait bien un "did you mean "Prison Break" par exemple ce qui est vraiment pas mal.

Mais l'install de pspell et de toutes les autres merdes est une autre galère ;)
 
L
lenono
Guest
Merci Julia41,

C'est bien ce que je pensais.
Effectivement d'une part libstemmer permet de faire un "Did U mean" à la google (une référence of course), mais cette qualité de prestation ne se fait pas sans mal, et c'est vraiment une horreur !!!
Cette qualité m'aurait quand même bien aidé dans mon taf. Mais je vais chercher quand même !

Bonne journée,

Arnaud
 
WRInaute passionné
Je te file le script que j'utilise pour ma fonction did u mean :
Code:
<?php
function didumean($query) {
	$pspell_config = pspell_config_create('fr', '', ''.SITENAME.'', 'cp1252');
	pspell_config_mode($pspell_config, PSPELL_FAST);
	pspell_config_personal($pspell_config, SITEDIR . '/includes/didumean.pws');
	$pspell_link = pspell_new_config($pspell_config);
	$words = preg_split ('/\s+/', $query);
	$ii = count($words);
	$spellchecked = '';
		for($i=0; $i<$ii; $i++){
			if (pspell_check($pspell_link, $words[$i])){
				$spellchecked .= $words[$i] . ' ';
			} else{
				$erroneous = TRUE;
				$suggestions = pspell_suggest($pspell_link, $words[$i]);
				if ($suggestions) 
					$spellchecked .= $suggestions['0'] . ' ';
			}
		}
	if(isset($erroneous)){
		return ucwords($spellchecked);
	} else{
		return false;
	}
}
?>

le : includes/didumean.pws est mon dico le post d'haut dessus avec "mes mots" dedans.
et ça s'utilise :
Code:
if (didumean($ta_recherche)) {
echo didumean($ta_recherche); 
} else {
echo $ta_recherche;
}
J'avais essayé les libs "listeinstein" (un truc de ce genre j'ai plus le nom sous la main) et les résultats étaient vraiment mauvais. Là avec pspell, t'arrives au premier résultat d'un correcteur d'orthographe de navigateur internet mais avec ton dico donc vraiment pas mal.
 
L
lenono
Guest
Merci beaucoup Julia41.

je remets donc le nez dans pspell, et je me permettrai de vous tenir éventuellement informés.

Bien bonne fin de journée,

Arnaud
 
WRInaute passionné
Julia41 a dit:
Perso je faisais un cron de "nettoyage" toute les nuits mais je t'avouerais que je savais plus à quoi il servait.

Généralement je faisais un :
update avec les index delta toutes les 10 minutes la journée (j'avais réussi à frauder avec la création d'un .txt vide en php et si présent on updatait ou non) en delta bien sûr (je payais au traffic et cette requête consommait 3Go de BP en --all).
Un gros --all à 3/4h du matin avec un restart du démon qui avait des petites fuites mémoires à l'époque (mais j'étais sous FreeBSD donc peu de retours).

Si jamais tu utilises l'API php, regarde du côté de PECL qui offrent des performances encore meilleures.

Pour ma part, j'ai opté pour une seule grosse requete sql dans 1 index (ne contenant que les champs réellement utilisés)
un indexer --all + un restart du démon (qui a toujours des fuites meme avec les dernières maj ;)) dure environ 50s à 1 minute ce qui est plutôt court. Je lance ca toute les nuits.

un indexer --rotate tous les 1/4h
et comme je suis parano un bash en cron toutes les minutes qui teste la presence de searchd et relance au cas ou (avec envoi de mail) parce que sérieux plus de démon plus d'moteur ca fait peur dans le cadre de mon domaine d'activité.

Concernant le "did you mean" je suis parti sur une idée d'utiliser le google suggest. J'utilise les logs de recherche de mon index 1 puis je les mouline avec ce scriptet crée un nouvel index2 sous sphinx que j'interroge avec les mots clés de ma 1ere requête (j'utilise donc sphinx une fois de plus pour me proposer le "did you mean")

Cela restant une technique pas tres clean je teste au moins l'idée avec, et me retournerai vers un dico perso ou bien carrément utiliser mes propres utilisateurs pour me construire l'index2 car malgré tout, les titres et descriptifs étant rédigé par les visiteurs, c'est bourré de fautes de syntaxe et d'orthographe, ce sont donc eux qui sont a même de proposer des dérivés de mots clés pertinents pour mes recherches.
 
WRInaute passionné
raljx a dit:
Pour ma part, j'ai opté pour une seule grosse requete sql dans 1 index (ne contenant que les champs réellement utilisés)
un indexer --all + un restart du démon (qui a toujours des fuites meme avec les dernières maj ;)) dure environ 50s à 1 minute ce qui est plutôt court. Je lance ca toute les nuits.

un indexer --rotate tous les 1/4h
Bon, moi il me fallait 25 minutes environ pour build l'index avec un --all pour 2 requêtes SQL (donc 2 indexs) un wiki codé perso et des descriptions de fichiers P2P (qui a dit illégaux ;)).
et comme je suis parano un bash en cron toutes les minutes qui teste la presence de searchd et relance au cas ou (avec envoi de mail) parce que sérieux plus de démon plus d'moteur ca fait peur dans le cadre de mon domaine d'activité.
J'avais fait ça, mais au final le moteur était vraiment stable dans mon cas, juste les fuites mémoire qui donnait un bon ptit coup de cleanuup en cas de restart
Concernant le "did you mean" je suis parti sur une idée d'utiliser le google suggest.
Tu parses le résultat de google ?
J'utilise les logs de recherche de mon index 1 puis je les mouline avec ce script et crée un nouvel index2 sous sphinx que j'interroge avec les mots clés de ma 1ere requête (j'utilise donc sphinx une fois de plus pour me proposer le "did you mean")

Cela restant une technique pas tres clean je teste au moins l'idée avec, et me retournerai vers un dico perso ou bien carrément utiliser mes propres utilisateurs pour me construire l'index2 car malgré tout, les titres et descriptifs étant rédigé par les visiteurs, c'est bourré de fautes de syntaxe et d'orthographe, ce sont donc eux qui sont a même de proposer des dérivés de mots clés pertinents pour mes recherches.
D'où la fonction "build stop word" de sphinx qui se base sur les recherches. Perso je me suis basé sur 4 mois de recherche pour bâtir mon "did you mean" (en l'améliorant par la suite toutes les 24 heures) et j'avais vraiment plus aucune faute de frappe.
 
WRInaute passionné
Julia41 a dit:
Bon, moi il me fallait 25 minutes environ pour build l'index avec un --all pour 2 requêtes SQL (donc 2 indexs) un wiki codé perso et des descriptions de fichiers P2P (qui a dit illégaux ;)).

Je gere environ 1 million de lignes d'où cette rapidité ...

Julia41 a dit:
Tu parses le résultat de google ?

En phase de test oui :oops: :) sur une autre IP

Julia41 a dit:
D'où la fonction "build stop word" de sphinx qui se base sur les recherches. Perso je me suis basé sur 4 mois de recherche pour bâtir mon "did you mean" (en l'améliorant par la suite toutes les 24 heures) et j'avais vraiment plus aucune faute de frappe.

Quand tu dis "en l'améliorant par la suite" ... c'est à la mano ou en automatique ?
 
WRInaute passionné
raljx a dit:
En phase de test oui :oops: :) sur une autre IP
Hum, je trouve ça "lent" et sensible (si on se fait blacklister plus de fonction)
Quand tu dis "en l'améliorant par la suite" ... c'est à la mano ou en automatique ?
En automatique, plus t'as de "query" sur sphinx, plus tes "logs" (de recherche) sont gros et donc plus tes stats peuvent être propre et nettoyées.

arfPetit modification de ce que j'ai dit plus haut, le build stop word se base sur le contenu des index et créé des mots à "éviter" normalement mais on peut s'en servir pour créer quelque chose de bien.
Il me semble que j'avais créé un ptit script bash qui récupérait les query dans les logs de recherche toutes les 12h pour créer une liste "adapter aux recherches de mes membres".
Bon, c'était pas lui mais voilà ce que j'ai fait pour trouver les trucs recherchés plus de 5 fois
Code:
cat sphinx-query.log | cut -d "]" -f 4| uniq -c | sort -n | awk {'if ($1 > 5) print $0'}
[pleins de trucs]
      6  big love
      6  Bones
      6  chuck
      6  dvdrip xvid-gks
      6  fringe
      6  life
      6  Prison Break
      6  vostfr dvdrip xvid-gks
      7  Bones
      7  ncis
      7  vostfr dvdrip xvid-gks
     10  greek
     11  rencontre avec le diable
     12
     12  grey's
     13  heroes
     21  test

Un autre truc qui peut être pas mal, pour ceux qui hésiterais est la création de RSS basés sur une recherche.
un peu de cache est toutefois pas mal mais généralement je me basais sur ce "nombre" du code ci-dessus pour la durée du cache (si beaucoup recherché c'est que c'est à "cacher" un peu moins) etc...
 
Olivier Duffez (admin)
Membre du personnel
même si je ne me sens pas de tester sphinx search, je tiens à vous remercier pour vos contributions car cette discussion est très intéressante. Merci de la part de la communauté WRI ;-)
 
WRInaute passionné
Je dirais même plus ; très intéressante, et très instructive.

Je la suis de près pour me lancer, sans doute un jour dans l'aventure.
 
L
lenono
Guest
medium69 a dit:
Je dirais même plus ; très intéressante, et très instructive.

Je la suis de près pour me lancer, sans doute un jour dans l'aventure.

Crois moi, aventure passionnante ... :wink:
 
WRInaute passionné
Alors pour reprendre l'histoire du 'did you mean' voila comment j'ai procédé, les résultats sont plus que corrects ;)
Merci une fois de + Julia41 pour les pistes.

J'ai penché plus du coté d'un "Suggest" que d'un "did you mean". Je trouve ca plus pertinent au niveau expérience utilisateur.
D'un autre coté les mots clés où le nombre de résultats est le plus important sont à 99% bien orthographiés et donc ressortiront en 1er à la manière d'un correcteur orthographique.

Cheminement :

Recuperation des requetes clients : Un cron parse les données 2 fois par jour (le mot clé, le nombre de resultats) du fichier sphinx de log des requetes clients (query.log) dans une table de la bdd.

Comparaison : Si le mot clé existe déjà alors on update le nombre de resultats (si > 10), si le mot clé n'existe pas on créé l'entrée. Si le mot clé ne donne plus de résultat ou donne un resultat < 10, on supprime l'entrée.

Enregistrement dans la bdd : Tous les mots clés où le résultat est > 10

Suppression / Création d'un nouveau fichier de log : On supprime le fichier de log et on en recréé un nouveau vide on peut en effet vite saturer l'espace disque suivant l'utilisation du moteur.

Redemarage :
On stoppe searchd (searchd --stop) et on relance le démon pour redonner la main à l'ecriture des logs (je supprimerai bien cette etape mais les données ne s'ecrivent pas apres la regeneration du fichier de log meme avec les bons droits)

Creation du nouvel index : Dans sphinx.conf on implémente un nouvel index (suggest) qui va stocker la table des mots clés.

Indexation : On lance l'indexation (par la suite les crons feront le travail)

Appel de l'index (suggest) :
Dans le code php on interroge l'index "suggest" en triant par nombre de résultats descendant. Dans mon cas, j'ai limité ces résultats à 3.

Affichage : A l'endroit ou l'on veut que la suggestion apparaisse, on affiche les resultats cliquables qui renvoyent sur l'index principal avec le nouveau mot clé proposé.

Franchement ? Mieux que Google :mrgreen:
 
WRInaute passionné
Intéressé par cette solution je vais suivre ce topic.

Question : niveau performance, ça ne peut tout de même pas remplacer les index natifs de MySQL ?
Par exemple, sur une simple requête champ = 'texte' sur une table qui contient 500 000 enregistrements où champ est de type index ?
 
L
lenono
Guest
dorian53 a dit:
Intéressé par cette solution je vais suivre ce topic.

Question : niveau performance, ça ne peut tout de même pas remplacer les index natifs de MySQL ?
Par exemple, sur une simple requête champ = 'texte' sur une table qui contient 500 000 enregistrements où champ est de type index ?

Sphinx se moque des index mysql.
Il indexe ce que tu lui donnes ! Donc si tu une table avec 500.000 enregistrements, que tu veux "sphinx-iser" un champ de type texte (non indexé dans mysql), ça marchera...
Donc si tu indexes un champ "champ" (+ l'id obligatoire de l'enregistrement), alors pour moi, j'ai constaté une bien meilleure réactivité de sphinx.
Sphinx ne remplace pas tout, mais est un outil qui complète mysql !

Personnellement, je n'ai remis dans sphinx que les champs qui étaient indexés (je ne fais pas de recherche ailleurs), puis php >> sphinx >>array des id>> recup des infos dans mysql par les id.

Voilà, c'est juste un retour d'expérience !

Bon AM,

Arnaud
 
WRInaute passionné
lenono a dit:
Sphinx ne remplace pas tout, mais est un outil qui complète mysql !
Je n'ai jamais dit ça ;)

dorian53 a dit:
Question : niveau performance, ça ne peut tout de même pas remplacer les index natifs de MySQL ?
Visiblement tu réponds oui.

Très intéressant, c'est tout même regrettable qu'un outil que l'on vient greffer soit plus performant que le soft en natif.
 
L
lenono
Guest
dorian53 a dit:
lenono a dit:
Sphinx ne remplace pas tout, mais est un outil qui complète mysql !
Je n'ai jamais dit ça ;)
C'était un complément d'info :wink:
dorian53 a dit:
Question : niveau performance, ça ne peut tout de même pas remplacer les index natifs de MySQL ?
Visiblement tu réponds oui.

Très intéressant, c'est tout même regrettable qu'un outil que l'on vient greffer soit plus performant que le soft en natif.

Oui, c'est sur ! Mais tous les génies ne sont pas dans la meme boite ! Heureusement pour nous d'ailleurs...

Pour info, tu peux te faire une petite install sphinx, compil et test, c'est très rapide !

J'ai fait un tout petit tuto là dessus (google : sphinx + ovh), et tu ne prendras pas de riques :wink:
 
WRInaute passionné
Sphinxsearch sert principalement pour les recherches et dégage énormément de charge Mysql, qui devient de ce fait disponible pour d'autres types de requêtes ... En tout cas il m'a permis de régler un problème récurrent de plusieurs mois (voir d'années)... Donc un gtrès très bon complément pour tous les sites qui utilisent une base de données importante (dans mon cas 12Go). Mes utilisateurs revivent :)

La config est en effet assez simple. Une connaissance de base des commandes linux est suffisante pour une utilisation classique. Cependant ce "greffon" dispose également d'une configuration avancée. Quand on aime l'optimisation, on est servi :)
 
WRInaute passionné
lenono a dit:
Personnellement, je n'ai remis dans sphinx que les champs qui étaient indexés (je ne fais pas de recherche ailleurs), puis php >> sphinx >>array des id>> recup des infos dans mysql par les id.

Petite piste, perso niveau optimisation MySQL (c'est pour ça que j'utilisais Sphinx car mon MySQL arrivait vraiment à trop de requête par seconde (3500 queries/secondes aux heures de pointes, 1500 q/s de moyenne sur 6 mois) :
Vu que sphinx ne retourne que des ID j'utilisais memcache sur tous mon site pour stocker les infos.
Memcache permet de stocker des arrays
Mon affichage était un tableau :
id - titre - nombre de commentaire - etc
Sphinx retourne que l'ID
Code:
if ($memcache->get('post_' . $id) {
// alors on affiche
} else {
// alors on fait la requête SQL et on en profite pour stocker dans memcache
Dans les meilleurs cas où toutes les requêtes SQL étaient dans le memcache, une recherche sphinx consommait 0 requête SQL ;)
Il m'ait même arrivé que mon serveur SQL plante et que la seule page du site fonctionnant soit la page de recherche :P
C'était assez marrant ;)

Sphinx est aussi utilisable très facilement en mode cluster, donc au niveau du connect, il suffit de mettre un timeout (perso j'avais mis 0.5 secondes vu que c'était en local), s'il ne réponds pas, il va chercher l'autre démon lancé sur un autre port.

Si vous payez votre traffic, une autre solution que j'avais mise de côté pour la construction du --all était quelque chose de crade mais qui marchait pas mal (mais trop galère alors j'ai pas fait mon radin)
construction des index sur le serveur SQL lui même (en local donc pas de traffic)
tarrage des index sur ce serveur SQL
envoi sur le serveur qui utilise sphinx api
détarrage des index
restart de sphinx si les index sont là.

J'économisais 72% de bande passante environ (mais au prit de pas mal de bugs :p)
 
L
lenono
Guest
C'est clair qu'avec 3500req/s, il faut de l'optimisation à tout niveau.
Pour ma part, j'alloue un fichier témoin lorsqu'un titre de film est modifié ou qu'un nouveau titre est ajouté. Ce témoin est testé [ -f ], et s'il est présent alors seulement je fais mon rotate.
Dans le pire des cas, je retourne 10 enregistrements (sur les recherches), donc je n'ai pas trop besoin de memcache.
Mais merci de l'astuce !

Arnaud
 
WRInaute passionné
raljx a dit:
pour exemple : 1 table de 2,5 millions de lignes avec 17 champs (les bons index et tout et tout) : 0.008 s pour une requête à 3 mots distincts.
Je suis curieux des détails, et surtout sur deux plans : la configuration sous laquelle tu as obtenu ce résultat, et la technique sur laquelle repose Sphynx.

Tu es sur un serveur dédié : quel type de processeur ? À quel cadence ? Quelle quantité de mémoire et de disque ? (c’est pour savoir dans quel contexte interpréter ces 8 millisecondes).

Ensuite, concernant Sphynx : la page d’accueil dit que la documentation présente le principe de fonctionnement. Mais j’ai rapidement survolé la documentation, et je ne vois rien concernant les théories qui fondent son fonctionnement ; comme les principes des algorithmes, etc. Connais-tu un endroit où l’on peut trouver cela ?
 
WRInaute passionné
Julia41 a dit:
Si vous payez votre traffic, une autre solution que j'avais mise de côté pour la construction du --all était quelque chose de crade mais qui marchait pas mal (mais trop galère alors j'ai pas fait mon radin)
construction des index sur le serveur SQL lui même (en local donc pas de traffic)
tarrage des index sur ce serveur SQL
envoi sur le serveur qui utilise sphinx api
détarrage des index
restart de sphinx si les index sont là.
J'économisais 72% de bande passante environ (mais au prit de pas mal de bugs :p)

Ca fait plaisir de voir qu'il n'y a pas que moi qui code parfois "moisi" :mrgreen:

@hibou : Chez moi sphinx tourne sur un dédié bi-xeon Quad Core 4Go 2*73Go
Concernant son principe de fonctionnement, tu as quelques pdf des diverses conférences (en complément de la doc) à propos de sphnix ici : http://www.sphinxsearch.com/presentations.html
 
L
lenono
Guest
hibou57 a dit:
raljx a dit:
pour exemple : 1 table de 2,5 millions de lignes avec 17 champs (les bons index et tout et tout) : 0.008 s pour une requête à 3 mots distincts.
Je suis curieux des détails, et surtout sur deux plans : la configuration sous laquelle tu as obtenu ce résultat, et la technique sur laquelle repose Sphynx.

Tu es sur un serveur dédié : quel type de processeur ? À quel cadence ? Quelle quantité de mémoire et de disque ? (c’est pour savoir dans quel contexte interpréter ces 8 millisecondes).

Ensuite, concernant Sphynx : la page d’accueil dit que la documentation présente le principe de fonctionnement. Mais j’ai rapidement survolé la documentation, et je ne vois rien concernant les théories qui fondent son fonctionnement ; comme les principes des algorithmes, etc. Connais-tu un endroit où l’on peut trouver cela ?

A titre personnel, j'ose meme pas décrire la structure mécanique de mon serveur, mais un indice : monocre, mongiga, et c'est serveur kisféplu chez OVH...
Pourtant, des requetes à 1,2 ou 3 mots donnent les memes résultats sur 450.000 enregistrements, indexés sur 3 champs dans sphinx...

Comme je dis, le mieux est d'essayer !

Pour le code, c'est open source, donc y'a ka lire :wink:

Arnaud
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Haut