diff --git a/ecrire/inc/indexation.php b/ecrire/inc/indexation.php
index 96d328b8b0c3d175b579086729e4ebd45dc749c7..ce5ac081468625093d5ed72f68decb53b7ef2912 100644
--- a/ecrire/inc/indexation.php
+++ b/ecrire/inc/indexation.php
@@ -379,7 +379,7 @@ function extracteur_html($fichier, &$charset) {
 
 // Indexer le contenu d'un document
 // http://doc.spip.org/@indexer_contenu_document
-function indexer_contenu_document ($row) {
+function indexer_contenu_document ($row, $min_long=3) {
 	global $extracteur;
 
 	if ($row['mode'] == 'vignette') return;
@@ -409,7 +409,7 @@ function indexer_contenu_document ($row) {
 			// importer le charset
 			$contenu = importer_charset($contenu, $charset);
 			// Indexer le texte
-			indexer_chaine($contenu, 1);
+			indexer_chaine($contenu, 1, $min_long);
 		}
 	} else {
 		spip_log("pas d'extracteur '$extension' fonctionnel");
@@ -419,7 +419,7 @@ function indexer_contenu_document ($row) {
 
 
 // http://doc.spip.org/@indexer_les_champs
-function indexer_les_champs(&$row,&$index_desc,$ponderation = 1){
+function indexer_les_champs(&$row,&$index_desc,$ponderation = 1, $min_long=3){
 	reset($index_desc);
 	while (list($quoi,$poids) = each($index_desc)){
 		$pipe=array();
@@ -444,14 +444,14 @@ function indexer_les_champs(&$row,&$index_desc,$ponderation = 1){
 			if (is_array($poids))
 				indexer_chaine($texte,array_shift($poids) * $ponderation,array_shift($poids));
 			else
-				indexer_chaine($texte,$poids * $ponderation);
+				indexer_chaine($texte,$poids * $ponderation, $min_long);
 		}
 	}
 }
 
 // Indexer les documents, auteurs, mots-cles associes a l'objet
 // http://doc.spip.org/@indexer_elements_associes
-function indexer_elements_associes($table, $id_objet, $table_associe, $valeur) {
+function indexer_elements_associes($table, $id_objet, $table_associe, $valeur, $min_long=3) {
 	global $INDEX_elements_associes, $tables_jointures, $tables_auxiliaires, $tables_principales;
 
 	if (isset($INDEX_elements_associes[$table_associe])){
@@ -488,6 +488,8 @@ function indexer_objet($table, $id_objet, $forcer_reset = true) {
 	global $INDEX_elements_objet;
 	global $INDEX_objet_associes;
 
+	$min_long = isset($GLOBALS['INDEX_mots_min_long'])?intval($GLOBALS['INDEX_mots_min_long']):3;
+
 	$table_index = 'spip_index';
 	$col_id = primary_index_table($table);
 	$id_table = id_index_table($table);
@@ -553,10 +555,10 @@ function indexer_objet($table, $id_objet, $forcer_reset = true) {
 			// 4. Indexer le thread
 			$s = spip_query("SELECT * FROM spip_forum WHERE id_forum IN ($thread) AND idx!='non'");
 			while ($row = spip_fetch_array($s)) {
-		    indexer_les_champs($row,$INDEX_elements_objet[$table]);
+		    indexer_les_champs($row,$INDEX_elements_objet[$table],1,$min_long);
 		    if (isset($INDEX_objet_associes[$table]))
 		      foreach($INDEX_objet_associes[$table] as $quoi=>$poids)
-						indexer_elements_associes($table, $id_objet, $quoi, $poids);
+						indexer_elements_associes($table, $id_objet, $quoi, $poids, $min_long);
 				break;
 			}
 
@@ -566,10 +568,10 @@ function indexer_objet($table, $id_objet, $forcer_reset = true) {
 			// 6. Changer l'id_objet en id_forum de la racine du thread
 			$id_objet = $id_forum;
 		} else {
-			indexer_les_champs($row,$INDEX_elements_objet[$table]);
+			indexer_les_champs($row,$INDEX_elements_objet[$table],1,$min_long);
 			if (isset($INDEX_objet_associes[$table]))
 				foreach($INDEX_objet_associes[$table] as $quoi=>$poids)
-					indexer_elements_associes($table, $id_objet, $quoi, $poids);
+					indexer_elements_associes($table, $id_objet, $quoi, $poids, $min_long);
 
 			if ($table=='spip_syndic'){
 				// 2. Indexer les articles syndiques
@@ -577,13 +579,13 @@ function indexer_objet($table, $id_objet, $forcer_reset = true) {
 					$result_syndic = spip_query("SELECT titre FROM spip_syndic_articles WHERE id_syndic=$id_objet AND statut='publie' ORDER BY date DESC LIMIT 100");
 
 					while ($row_syndic = spip_fetch_array($result_syndic)) {
-		    		indexer_les_champs($row,$INDEX_elements_objet['syndic_articles']);
+		    		indexer_les_champs($row,$INDEX_elements_objet['syndic_articles'],1,$min_long);
 					}
 				}
 			}
 			if ($table=='spip_documents'){
 				// 2. Indexer le contenu si on sait le lire
-				indexer_contenu_document($row);
+				indexer_contenu_document($row,$min_long);
 			}
 	 	}
 	} else
@@ -725,8 +727,7 @@ AND rec.id_table = $id_table",
 // rechercher un mot dans le dico
 // retourne deux methodes : lache puis strict
 // http://doc.spip.org/@requete_dico
-function requete_dico($val) {
-	$min_long = 3;
+function requete_dico($val, $min_long = 3) {
 	
 	preg_match(",^([+\-]?)(.*),",$val,$mod);
 	switch($mod[1]) {
@@ -743,7 +744,8 @@ function requete_dico($val) {
 	//set logical operator between the various where parts
 	$val = $mod[2];
 	// cas normal
-	if (strlen($val) > $min_long) {
+	if ((strlen($val) > $min_long)
+	OR !preg_match("/^([A-Z][0-9A-Z]{1,".($min_long - 1)."})$/",$val)) {
 	  return array("dico LIKE "._q($val. "%"), "dico = " . _q($val),$mode);
 	} else
 	  return array("dico = "._q($val."___"), "dico = "._q($val."___"),$mode);
@@ -753,15 +755,17 @@ function requete_dico($val) {
 // decode la chaine recherchee et la traduit en hash
 // http://doc.spip.org/@requete_hash
 function requete_hash ($rech) {
+	$min_long = isset($GLOBALS['INDEX_mots_min_long'])?intval($GLOBALS['INDEX_mots_min_long']):3;
+
 	// recupere les mots de la recherche
 	$GLOBALS['translitteration_complexe'] = true;
-	$s = mots_indexation($rech);
+	$s = mots_indexation($rech,$min_long);
 	unset($dico);
 	unset($h);
 	
 	// cherche les mots dans le dico
 	while (list(, $val) = each($s)) {
-		list($rq, $rq_strict,$mode) = requete_dico ($val);
+		list($rq, $rq_strict,$mode) = requete_dico ($val,$min_long);
 		if ($rq)
 			$dico[$mode][$val] = $rq;
 		if ($rq_strict)