Changeset 69055 – SPIP-ZONE

/69055

  • Sur Flip-Zone, les recherches #SPIP avec le #plugin #FULLTEXT s’effondrent systématiquement : la boucle de recherche prend au minimum 30 secondes.

    La requête en cause est :

    SELECT t.id_article, MATCH(t.titre) AGAINST (’lor*’ IN BOOLEAN MODE) 3.1 + MATCH(t.surtitre,t.titre,t.soustitre,t.chapo,t.texte,t.ps,t.nom_site,t.descriptif) AGAINST (’lor’ IN BOOLEAN MODE) 1.1 + IF(SUM(o1.score) IS NULL,0,SUM(o1.score)) + IF(SUM(o2.score) IS NULL,0,SUM(o2.score)) + IF(SUM(o3.score) IS NULL,0,SUM(o3.score)) AS score, t.popularite FROM newflipzone.spip_articles AS t LEFT JOIN ( SELECT lien1.id_objet,MATCH(obj1.nom,obj1.nom,obj1.bio,obj1.email,obj1.nom_site,obj1.url_site) AGAINST (’lor’ IN BOOLEAN MODE) AS score FROM newflipzone.spip_auteurs_liens as lien1 JOIN newflipzone.spip_auteurs as obj1 ON obj1.id_auteur=lien1.id_auteur WHERE lien1.objet=’article’ ) AS o1 ON o1.id_objet=t.id_article LEFT JOIN ( SELECT lien2.id_objet,MATCH(obj2.titre,obj2.titre,obj2.texte,obj2.descriptif) AGAINST (’lor*’ IN BOOLEAN MODE) AS score FROM newflipzone.spip_mots_liens as lien2 JOIN newflipzone.spip_mots as obj2 ON obj2.id_mot=lien2.id_mot WHERE lien2.objet=’article’ ) AS o2 ON o2.id_objet=t.id_article LEFT JOIN ( SELECT lien3.id_objet,MATCH(obj3.titre,obj3.titre,obj3.descriptif) AGAINST (’lor*’ IN BOOLEAN MODE) AS score FROM newflipzone.spip_documents_liens as lien3 JOIN newflipzone.spip_documents as obj3 ON obj3.id_document=lien3.id_document WHERE lien3.objet=’article’ ) AS o3 ON o3.id_objet=t.id_article WHERE t.statut=’publie’ GROUP BY t.id_article ORDER BY score DESC LIMIT 0,500

    Il y a 3200 articles, mais 86000 documents (qui n’ont ici aucun intérêt, ce sont des photos dont le titre et le descriptif ne sont pas pertinents pour la recherche).

    Le problème semble venir des jointures.

    Tout ce que j’ai trouvé pour l’instant, c’est de commenter le paquet de la condition

    if (is_array($jointures[$table]))

    dans inc/recherche_to_array.php

    Ça vire la gestion des jointures dans la création de la requête de recherche fulltext, et la recherche redevient instantanée.