diff --git a/ecrire/inc_index.php3 b/ecrire/inc_index.php3
index 7ab49721f24deb1779b5b17f61bb514d8440f8f2..29b51c3ec3fbc5a119e4840d0a0313761b87c1b8 100644
--- a/ecrire/inc_index.php3
+++ b/ecrire/inc_index.php3
@@ -118,7 +118,7 @@ $GLOBALS['extracteur'] = array (
 );
 
 // Indexer le contenu d'un document
-function indexer_document ($row) {
+function indexer_contenu_document ($row) {
 	global $extracteur;
 
 	if ($row['mode'] == 'vignette') return;
@@ -158,6 +158,48 @@ function indexer_document ($row) {
 	}
 }
 
+
+// Indexer les documents, auteurs, mots-cles associes a l'objet
+function indexer_elements_associes($objet, $id_objet, $associe, $valeur) {
+	switch ($associe) {
+		case 'document':
+			$r = spip_query("SELECT doc.titre, doc.descriptif
+				FROM spip_documents AS doc,
+				spip_documents_".table_objet($objet)." AS lien
+				WHERE lien.".id_table_objet($objet)."=$id_objet
+				AND doc.id_document=lien.id_document");
+			while ($row = spip_fetch_array($r)) {
+				indexer_chaine($row['titre'],2 * $valeur);
+				indexer_chaine($row['descriptif'],1 * $valeur);
+			}
+			break;
+
+		case 'auteur':
+			$r = spip_query("SELECT auteurs.nom
+				FROM spip_auteurs AS auteurs,
+				spip_auteurs_".table_objet($objet)." AS lien
+				WHERE lien.".id_table_objet($objet)."=$id_objet
+				AND auteurs.id_auteur=lien.id_auteur");
+			while ($row_doc = spip_fetch_array($r)) {
+				indexer_chaine($row['nom'], 1 * $valeur, 2);
+			}
+			break;
+
+		case 'mot':
+			$r = spip_query("SELECT mots.titre, mots.descriptif
+				FROM spip_mots AS mots,
+				spip_mots_".table_objet($objet)." AS lien
+				WHERE lien.".id_table_objet($objet)."=$id_objet
+				AND mots.id_mot = lien.id_mot");
+			while ($row = spip_fetch_array($r)) {
+				indexer_chaine($row['titre'],4 * $valeur);
+				indexer_chaine($row['descriptif'],1 * $valeur);
+			}
+			break;
+	}
+}
+
+
 function indexer_objet($type, $id_objet, $forcer_reset = true) {
 	global $index, $mots, $translitteration_complexe;
 
@@ -205,30 +247,17 @@ function indexer_objet($type, $id_objet, $forcer_reset = true) {
 		indexer_chaine($row['ps'], 1);
 		indexer_chaine($row['nom_site'], 1);
 		indexer_chaine(@join(' ', unserialize($row['extra'])), 1);
-		$r = spip_query("SELECT doc.titre, doc.descriptif FROM spip_documents AS doc, spip_documents_articles AS lien WHERE lien.id_article=$id_objet AND doc.id_document=lien.id_document");
-		while ($row_doc = spip_fetch_array($r)) {
-			indexer_chaine($row_doc[0],2);
-			indexer_chaine($row_doc[1],1);
-		}
-
-		$query2 = "SELECT mots.* FROM spip_mots AS mots, spip_mots_articles AS lien WHERE lien.id_article=$id_objet AND mots.id_mot=lien.id_mot";
-		$result2 = spip_query($query2);
-		while ($row = spip_fetch_array($result2)) {
-			indexer_chaine($row['titre'], 12);
-			indexer_chaine($row['descriptif'], 3);
-		}
-	
-		$query3 = "SELECT auteurs.* FROM spip_auteurs AS auteurs, spip_auteurs_articles AS lien WHERE lien.id_article=$id_objet AND auteurs.id_auteur=lien.id_auteur";
-		$result3 = spip_query($query3);
-		while ($row = spip_fetch_array($result3)) {
-			indexer_chaine($row['nom'], 10, 2);
-		}
+		indexer_elements_associes('article', $id_objet, 'document', 1);
+		indexer_elements_associes('article', $id_objet, 'auteur', 10);
+		indexer_elements_associes('article', $id_objet, 'mot', 3);
 		break;
 
 	case 'breve':
 		indexer_chaine($row['titre'], 8);
 		indexer_chaine($row['texte'], 2);
 		indexer_chaine(@join(' ', unserialize($row['extra'])), 1);
+		indexer_elements_associes('breve', $id_objet, 'document', 1);
+		indexer_elements_associes('breve', $id_objet, 'mot', 3);
 		break;
 
 	case 'rubrique':
@@ -236,11 +265,8 @@ function indexer_objet($type, $id_objet, $forcer_reset = true) {
 		indexer_chaine($row['descriptif'], 5);
 		indexer_chaine($row['texte'], 1);
 		indexer_chaine(@join(' ', unserialize($row['extra'])), 1);
-		$r = spip_query("SELECT doc.titre, doc.descriptif FROM spip_documents AS doc, spip_documents_rubriques AS lien WHERE lien.id_rubrique=$id_objet AND doc.id_document=lien.id_document");
-		while ($row_doc = spip_fetch_array($r)) {
-			indexer_chaine($row_doc[0],2);
-			indexer_chaine($row_doc[1],1);
-		}
+		indexer_elements_associes('rubrique', $id_objet, 'document', 1);
+		indexer_elements_associes('rubrique', $id_objet, 'mot', 3);
 		break;
 
 	case 'auteur':
@@ -267,6 +293,8 @@ function indexer_objet($type, $id_objet, $forcer_reset = true) {
 	case 'syndic':
 		indexer_chaine($row['nom_site'], 50);
 		indexer_chaine($row['descriptif'], 30);
+		indexer_elements_associes('syndic', $id_objet, 'document', 1);
+		indexer_elements_associes('syndic', $id_objet, 'mot', 3);
 
 		// Ajouter les titres des articles syndiques de ce site, le cas echeant
 		if ($row['syndication'] = "oui") {
@@ -344,8 +372,10 @@ function indexer_objet($type, $id_objet, $forcer_reset = true) {
 		indexer_chaine($row['titre'], 20);
 		indexer_chaine($row['descriptif'], 10);
 		indexer_chaine(preg_replace(',^(IMG/|.*://),', '', $row['fichier']), 1);
+		indexer_elements_associes('document', $id_objet, 'mot', 3);
+
 		// 2. Indexer le contenu si on sait le lire
-		indexer_document($row);
+		indexer_contenu_document($row);
 		break;