[Top][All Lists]
[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
Re: [sdx-users] J'y étais presque...,
Malo Pichot <=