Recherche et jointures - petit problème d'écrasement des résultats
Pour reproduire le problème, créer un article, et attacher deux documents, avec les titres "Pingouin breton" et "Pingouin des Andes". Puis faire une recherche sur "Pingouin".
L'article est bien trouvé, grâce à la jointure entre l'article et les documents. Cependant il y a un léger problème.
Dans le détail, a) la recherche se fait pour tout la table documents
[1]. On peut afficher le tableau de résultats[2] pour cette table, les deux documents sont trouvés, et ont un score de 2
correspondant au poids du titre :
array ( 1 => array ( 'champs' => array ( 'titre' => 'Pingouin breton', ), 'score' => 2, ), 3 => array ( 'champs' => array ( 'titre' => 'Pingouin des andes', ), 'score' => 2, ), )
b) dans l'appel de la fonction correspondant à la table des articles, on sélectionne, parmi les documents trouvés, ceux qui sont liés à l'article (via la table documents_liens
)[3]
c) on remplit le tableau de résultats pour la table des articles[4]. Le résultat est le suivant
array ( 1 => // id_article array ( 'score' => 4, // somme des deux scores (2 + 2) 'champs' => array ( 'document.titre' => 'Pingouin des andes', // <= seulement le titre du deuxième document, le premier ayant été écrasé à cause de [5] ), ), )
Il faudrait donc prévoir un autre mécanisme pour permettre de rapporter tous les contenus correspondant aux occurrences trouvées. ça pourrait être quelque chose comme
array ( 1 => // id_article array ( 'score' => 4, // somme des deux scores (2 + 2) 'champs' => array ( 'document.titre' => array ( 1 => 'Pingouin breton', 3 => 'Pingouin des andes' ), ), ), )mais il faudrait voir les conséquences sur le reste du code.
[1] http://core.spip.org/projects/spip/repository/entry/spip/ecrire/inc/recherche_to_array.php#L141 [2] http://core.spip.org/projects/spip/repository/entry/spip/ecrire/inc/recherche_to_array.php#L221 [3] http://core.spip.org/projects/spip/repository/entry/spip/ecrire/inc/recherche_to_array.php#L177 [4] http://core.spip.org/projects/spip/repository/entry/spip/ecrire/inc/recherche_to_array.php#L193 [5] http://core.spip.org/projects/spip/repository/entry/spip/ecrire/inc/recherche_to_array.php#L209