Mauvais calcul de score en InnoDB ?
SPIP 4.2 git / Fulltext branche master git / Mysql 8.0.31
J'ai remarqué qu'en passant mes tables en InnoDB, j'avais des résultats qui ne remontaient plus dans le privé quand je cherchais un auteur par exemple.
Je suis descendu dans inc/recherche_to_array.php pour tracer les requetes qui utilisent les indexes fulltext et leurs résultats.
Avec la même requête sur spip_auteurs
plus jointures automatiques sur spip_mots_liens + spip_mots
et spip_gis_liens + spip_gis
, en InnoDB j'ai un auteur qui a un score à 0 alors qu'en MyISAM non.
Ce qui fait que cet auteur est exclu des résultats, par le test ici je pense : https://git.spip.net/spip-contrib-extensions/fulltext/src/commit/ff229a956716c3b767ab6e25a022be3a3eee1cfe/inc/recherche_to_array.php#L354
J'ai pu isoler une requête de test :
SELECT t.id_auteur, t.nom, t.bio, t.email, t.nom_site, t.url_site, t.login, t.auteur_nom, t.auteur_prenom,
MATCH(t.`nom`) AGAINST ('llorca*' IN BOOLEAN MODE) * 5
+ MATCH(t.`nom`,t.`bio`,t.`email`,t.`nom_site`,t.`url_site`,t.`auteur_nom`,t.`auteur_prenom`) AGAINST ('llorca*' IN BOOLEAN MODE) * 1.1
AS score
FROM spip_auteurs AS t
WHERE
(
(MATCH(t.`nom`) AGAINST ('llorca*' IN BOOLEAN MODE))
OR (MATCH(t.`nom`,t.`bio`,t.`email`,t.`nom_site`,t.`url_site`,t.`auteur_nom`,t.`auteur_prenom`) AGAINST ('llorca*' IN BOOLEAN MODE))
)
GROUP BY t.id_auteur
ORDER BY score DESC
LIMIT 0,500
En MyISAM j'ai 5 résultats, avec chacun un score de 6.1
En InnoDB, j'ai 5 résultats aussi, les même, mais avec des scores de 116.05217399597169 à 101.06328926086425 pour les 4 premiers puis de 0 pour les dernier.
J'en suis là pour l'instant, j'essaie de débugger la suite.