sdx-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [sdx-users] J'y étais presque...


From: Malo Pichot
Subject: Re: [sdx-users] J'y étais presque...
Date: Fri, 24 Oct 2003 08:18:59 +0200
User-agent: KMail/1.5

Bonjour,

Le Jeudi 23 Octobre 2003 18:34, Pierre Dittgen a écrit :
> Bonsoir,
>
> Je suis en train de tester des variantes de requête avec joker
> et accents. Mon but étant de savoir combien de documents ont
> un champ prénom commençant par une lettre donnée.
>
> Prérequis :
> * prenom est un champ indexé de type field
> * w-prenom est un champ indexé de type word
> * Dans ma base de documents, on trouve les valeurs :
> - doc1 (prenom=arbre)
> - doc2 (prenom=âne)
> - doc3 (prenom=à l'abordage)
> - doc4 (prenom=Aline)
> - doc5 (prenom=À la garde !)
> (étranges prénoms, j'en conviens, encore que... j'ai déjà
> rencontré une Aline)
>
> Voici ce que j'ai constaté :
>
> La requête linéaire (linearquery) lucene suivante
> prenom:a*
> me retourne doc1 (prenom=arbre)

Normal dans le cas d'un champ 'field' : l'analyseur n'appauvrit 
pas les caractères.

> La requête linéaire lucene suivante
> w-prenom:à*
> me retourne doc3 (prenom=à l'abordage)
>
> La requête linéaire lucene suivante
> w-prenom:a*
> me retourne doc1 (prenom=arbre) et doc4 (prenom=Aline)
>
> La requête linéaire lucene suivante
> w-prenom:à*
> ne me retourne rien

Ces trois résultats me paraissent suspects. On s'attend plutôt à 
tout retrouver étant donné que l'analyseur appauvrit tous les 
caractères dans un champ 'word'. La piste donnée par Pierrick 
(un problème d'analyseur ?) est intéressante.

> C'est un peu lourd mais c'est faisable.
> (je l'ai fait, en écrivant un fichier XML qui dit pour chaque
> lettre majuscule de l'alphabet français, quelles sont les
> variantes majuscules et minuscules)

Ici, on peut faire simple en XSLT avec la fonction 'translate()' 
prenant trois arguments :

 # la chaîne à transformer
 # le(s) caractère(s) à modifier
 # le(s) caractère(s) que l'on souhaite obtenir

Ca peut s'écrire ainsi :

<xsl:variable name="maj" select="'ABCDEFGHIJKLMNOPQRSTUVWXZ'" />
<xsl:variable name="min" select="'abcdefghijklmnopqrstuvwyx'" />
<xsl:value-of select="translate(@value,$maj,$min)" />

Pour un @value='Aline', on obtient 'aline'. On peut compliquer en 
ajoutant les lettres accentuées. Il faut juste faire attention 
que le nombre de caractères à modifier reste le même que celui 
des caractères que l'on souhaite obtenir.

> Maintenant, si je souhaite avoir la liste des termes pour le
> champ "prenom" qui commence par a (et toutes ses variantes)
> comment puis-je me débrouiller. Apparemment, sdx:terms ne
> prend en compte que la première valeur du paramètre "value"  ?

Avez-vous regarder la "glossary.xsp" de SDXTest ? Elle présente 
la logique que vous cherchez à implanter : retirer la liste des 
termes indexés dans un champ par ordre alphabétique. Son 
mécanisme est basé sur <sdx:terms>, interrogeant le champ 
'contenu' (indexation fulltext) de type word :

<xsp:page>
 <sdx:page>
  ...
  <sdx:terms field="contenu" value="a*" hpp="-1">
   <sdx:location base="sdxdoc"/>
   <sdx:location base="sdxworld"/>
  </sdx:terms>
 </sdx:page>
</xsp:page>

A bientôt,
-- 
Malo





reply via email to

[Prev in Thread] Current Thread [Next in Thread]