utilisation limite du moteur de recherche

Antoine,

Merci de ton conseil. Mais je me suis mal fait comprendre : mon problème n'est pas de trouver des références que je ne connaîtrais pas, mais au contraire, d'obtenir une liste d'articles qui contiennent des références connues. J'ai un problème de nombres : une centaine de références par article ; je ne peux donc pas entrer un mot-clé par référence ; et en même temps, puisque je dois afficher pour les visiteurs du site l'ensemble des références présentes sur le site (un index quoi), je décompose en deux temps : #TITRE d'un mot-clé générique pour une oeuvre en général (Les Métamorhoses) et #TEXTE|mon_filtre_qui_fabrique_une_requête pour la liste de toutes les références précises présentes quelque part dans le site. J'ai donc indexé manuellement chaque article en extrayant l'ensemble des références présentes dans les articles et en les ayant entrées dans le champ texte des mots-clés. L'utilisateur clique ensuite sur un des items de la liste qui va lancer une requête de type recherche.php3?recherche=Ov.Met.2,31 (et non pas simplement Ov.Met qui est trop imprécis). Je veux juste ensuite qu'il me sorte la liste des articles où Ov.Met,2,31 exactement soit présent. Ce qui me permet en plus d'utiliser spip_surligne un peu customisé pour mettre des ancres qui positionnent l'écran sur la première occurrence de la référence dans le texte et surligne les autres. C'est absolument nécessaire dans la mesure où les articles font jusqu'à 60 pages Word.

Mon utilisation des mots-clés et du moteur est limite, mais pas originale : les mots-clés fabriquent des index manuels et le moteur dont les critères sont contraints par la liste manuelle d'index cherche les articles où l'entrée d'index est présente. Je sais qu'idéalement je devrais utiliser l'attribuation de mots-clés aux articles pour retrouver les articles à partir d'une liste de mots-clés. Mais là j'en ai tout simplement trop ; je dois donc grouper les références dans un mot-clé générique et permettre à l'utilisateur de lancer une requête par moteur de recherche sur chacun des items de la liste. Il faut juste que le moteur me fasse une recherche exacte sur l'ensemble de la référence sans la décomposer en Ov+Met+2+31. Manifestement, il garde l'intégralité sur la plupart des références, mais pas sur toutes.

Amitiés,

P. Mounier

On 15 May 2003 at 17:40, Antoine wrote:

Salut,

En fait ton utilisation du moteur de recherche est un pis-aller puisque
tu sais que tu veux un résultat unique, et totalement déterministe.

Je te propose une autre approche, qui demandera un peu de compétences,
mais à mon avis plus satisfaisante :

- modifier ton filtre pour qu'il renvoie les requêtes vers un couple de
squelettes particulier : par exemple reference.php3?ref=Ov.Met

- créer un nouveau inc-urls-toto.php3 afin de récupérer le "ref" et
le transformer en "id_mot" ; le mode d'emploi est indiqué au début de
inc-urls-dist.php3 : il faut ajouter à la fonction recuperer_parametres_url
le morceau de code nécessaire, du genre :

function recuperer_parametres_url($fond, $url) {
  global $contexte;
        if ($fond == "reference" and $GLOBALS['ref']) {
             $titre = addslashes($GLOBALS['ref']);
             $query = "SELECT id_mot FROM spip_mots WHERE titre = '$titre'";
             $result = spip_query($query);
             if ($row = spip_fetch_array($result)) {
                     $contexte['id_mot'] = $row['id_mot'];
             }
        }
  return;
}

Ainsi dans le squelette reference.html, tu pourras écrire simplement
une boucle mots-clés ( <BOUCLE_mots(MOTS) {id_mot}> ) qui utilisera
automatiquement l'id_mot correspondant au "ref" passé dans l'URL.

Ensuite, il faut configurer inc-urls.php3 pour utiliser inc-urls-toto,
et vérifier que cela marche (c'est-à-dire que reference.php3?ref=mon_titre
affiche bien un mot-clé si "mon_titre" est un titre de mot-clé existant).

Plusieurs avantages :

- tu simplifies le travail de saisie (pas besoin de saisir les
références croisées à la main dans le texte du mot-clé pour
faire "tilter" le moteur de recherche)

- les résultats sont garantis (au contraire du moteur de recherche)

- le moteur n'étant pas sollicité, les pages s'affichent plus vite

Plus tard, si cette méthode marche, tu pourras enjoliver les URLs
à l'aide d'un système de "rewrite rules", par exemple renvoyer les
références vers www.monsite.com/ref/Ov.Met, qui lui-même sera redirigé
vers reference.php3?ref=Ov.Met

Amicalement

Antoine.

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.uzine.net/spip