[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [sdx-users] Mot accentué versus opéra teur truncature
From: |
Martin Sevigny |
Subject: |
Re: [sdx-users] Mot accentué versus opéra teur truncature |
Date: |
Thu, 04 Nov 2004 08:19:14 +0100 |
User-agent: |
Mozilla Thunderbird 0.8 (Windows/20040913) |
Bonjour,
Question éclair... Est-normale que losrque l'on utilise la truncature
sur un mot avec des accents, on ait aucun résultats?
Par exemple:
frere* - me donne des résultats
frère* - ne donne rien
(même chose avec le ?)
"normal".
C'est pas seulement sur ma base... J'ai essayé sur le site Archives
Canada France avec "montréal*" et "montreal*" et j'ai le même comportement.
Oui.
Je ne sais pas si c'est un bug ou une fonctionalité ;) mais je voulais
votre avis...
Officiellement, c'est ce que j'appelle une "fonctionnalité ennuyeuse".
En fait, pour ne pas faire cela, il faudrait abandonner certains aspects
du multilinguisme dans SDX. Toutefois, pour la grande majorité des
sites, ce n'est pas utile.
A réfléchir. Il y a sûrement moyen d'écrire un QueryParser qui gère cela
un peu mieux.
Concrètement, lorsqu'il y a un "*" ou un "?" dans un mot d'une requête,
le mot en question n'est pas analysé avec l'analyseur de mots utilisé
lors de l'indexation. S'il n'y a pas de "*" ou "?", il est analysé.
Donc si dans le document il y a "frère", l'analyseur de mots retourne
"frere" à l'indexation (en général). Si on cherche "frer*", ça marche,
si on cherche "frèr*" ça ne marche pas car on cherche dans l'index des
mots qui commencent par "frèr" et il n'y en a évidemment pas.
Si vous êtes confiants que les requêtes simples n'auront jamais de trucs
complexes, vous pouvez faire ceci dans votre XSP:
<xsp:logic>
String req = request.getParameter("q"); // q ou autre chose...
req = req.toLowerCase();
req = supprimeAccents(req);
</xsp:logic>
<sdx:executeSimpleQuery queryString="req"/>
Il vous reste à écrire supprimeAccents. A noter que la classe
fr.gouv.culture.sdx.search.lucene.analysis.filter.ISOLatin1AccentFilter
contient du code pour cela.
A bientôt,
Martin Sévigny