SPIP ecureuil




Thème de ce forum :

Erreur MySQL lors d’une recherche



flapok
Erreur MySQL lors d’une recherche
2 décembre 2008 15:39

Bonjour,

Je suis Webmestre d’un site SPIP (SPIP 1.9.2d) qui possède de nombreux articles. Mon problème se situe au niveau de la recherche. En effet, il arrive que cette dernière ne donne aucun résultat alors que le mot spéficifé est bien présent dans au moins un article.

En regardant de plus près, ce problème semble survenir lorsque le mot recherché est "trop" présent. La requete SQL générée est d’une longueur assez incroyable et MySQL me renvoit cette erreur :

Thread stack overrun: 115280 bytes used of a 126976 byte stack, and 12000 bytes needed. Use 'mysqld -O thread_stack=#' to specify a bigger stack.

Voici un bout de la requête pour vous donner une idée de son ampleur :

(articles.id_article  IN (4263,3571,3456,3557,689,2846,493,1982,2698,3266,3151,3323,
3343,4145,3578,922,2465,.....)

Et ca continue ainsi sur une très grande distance.

Je peine à trouver une solution.

J’ai tout d’abord pensé à augmenter la taille de la variable MySQL "Tread stack", mais en toute logique, cela ne fera que repousser l’erreur.

Je dois pouvoir être capable d’écrire un moteur de recherche en PHP qui ne me renverra pas une requète de cette taille ; mais si je peux l’éviter, ce serait mieux. :)

Je fais donc appel à ce Forum, si certains ont eu le même type d’erreur ou ont une idée d’où cela peut venir, qu’ils n’hésitent pas.

Tout avis étant le bienvenu :)

Rechercher dans les forums:
 

squirrel
2 décembre 2008 19:09
Erreur MySQL lors d’une recherche

Désolé, mais je pense que cela ne vient pas de spip, mais peut être de certains réglages effectué au niveau SQL....à suivre

flapok
3 décembre 2008 10:15
Erreur MySQL lors d’une recherche

Pourtant c’est bien la boucle recherche de spip qui génère cette requète immense et qui finalement abouti à une erreur MySQL.

A priori MySQL se contente d’executé la requète qu’il reçoi de spip, donc de ce coté, comme je l’ai préciser, je peut augmenter la taille de la variable tread stack. Mais plus le mot recherché est present dans les articles, plus la requête est grande. Si aujourd’hui j’ai besoin d’une valeur a 200 000, demain se sera 400 000 et ainsi de suite. Je ne pense pas que se soit la "bonne" solution.

Je vais tout de même continuer a creuser, aussi du coté de MySQL.

Squirrel
3 décembre 2008 10:42
Erreur MySQL lors d’une recherche

Tu peux publier la boucle en question ? avec les balises code du forum spip

denisb
3 décembre 2008 12:25
Erreur MySQL lors d’une recherche

tu utilises acces_restreint ?

flapok
3 décembre 2008 15:33
Erreur MySQL lors d’une recherche

Voici la boucle utilisée :

<BOUCLE_article(ARTICLES){par points}{inverse}{recherche}{id_rubrique!=55}{id_rubrique!=56}{0,100}>
</BOUCLE_article>

C’est normalement la boucle standard de Spip.

Et oui, le plugin "acces_restreint" est activé, mais je ne vois pas l’incidence qu’il pourrait avoir sur la requête.

flapok
3 décembre 2008 15:33
Erreur MySQL lors d’une recherche

Voici la boucle utilisée :

<BOUCLE_article(ARTICLES){par points}{inverse}{recherche}{id_rubrique!=55}{id_rubrique!=56}{0,100}>
</BOUCLE_article>

C’est normalement la boucle standard de Spip.

Et oui, le plugin "acces_restreint" est activé, mais je ne vois pas l’incidence qu’il pourrait avoir sur la requête.

denisb
3 décembre 2008 17:52
Erreur MySQL lors d’une recherche

effectivement, sur un gros site (beaucoup d’articles), la recherche peut saturer, surtout pour des mots très présents.
il n’y a pas de solution miracle : passer le « thread_stack » à 256Ko. (196 608 o. par défaut) dans la conf de mysql (si on y a accès...)

sinon écrire son propre moteur pour aller interroger les « spip_index » en s’inspirant de la fonction prepare_recherche() dans ecrire/inc/indexation.php (mais après avoir lu la page : http://www.spip.net/fr_article1575.html)

pour acces_restreint, c’était une erreur de ma part : il n’intervient pas spécifiquement dans la recherche...

squirrel
3 décembre 2008 23:48
Erreur MySQL lors d’une recherche

Ou sinon créer un moteur personnalisé avec monsieur Gogole !

RSS






squelette