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

Modification effectuée par JamesRezo