sdx-users
[Top][All Lists]
Advanced

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

RE: [sdx-users] Problème sdx:filter


From: Castonguay Dave
Subject: RE: [sdx-users] Problème sdx:filter
Date: Wed, 23 Mar 2005 11:22:24 -0500

Encore moi,

je remonte ma moyenne d'Activité sur la liste :)

Bon, j'ai investigué... Résultat, oubliez la partie sur la logicsheet du 
message précédent.

J'avais tout faux! 

Cette fois par contre, je crois que j'ai compris ce qui ce passe.

Le problème, il y a des différences de comportements entre les deux "requêtes" 
suivants:

1. <sdx:terms  fieldParam="field" valueParam="value"/>

et

2. <sdx:terms  qidString="myQid" fieldParam="field" valueParam="value"/>

La différence est au niveau de la classe Terms elle même et en particulier dans 
la méthode getTerms.
Deux implementation différentes de getTerms sont appellées.

En gros, dans le premier cas, les paramètres sont comparés avec la base de 
document en utilisant des objets Filter.
Dans le second cas, on retrouve d'abord les "hits" de la requête spécifié par 
"qidString".
Ensuite on retrouve pour chacun des "hits" les valeurs pour le champ filtré. 
Ensuite on compare les valeurs du "hit" directment avec la valeur du filtre en 
faisant un String.equals (genre: hitValeur.equals(filtreValeur) ). (voir 
Terms.java ligne 872-929)

C'est tout à fait en accord avec les tests que j'ai fait.

- Si qidString réfère à une requête inexistante. Aucun résultat, car la 
collection de "hits" est null.
- Si qidString a effectivement des "hits" et que valueParam est une expression 
du genre "B*". Aucun résultat, car valeurHits n'est jamais égal à valueParam.
- Enfin, Si qidString a effectivement des "hits" et que valueParam correspond à 
une valeur complète du genre "Biographie". Nous aurons des résultats pour les 
cas ou valeurHits est égale à valueParam.

Ça clarifie la situation pour moi. Mais ça ne r`gle pas mon problème. :(

Je vais tenter une petite modification à la classe Terms. Je vais simplement 
changer l'appel String.equals pour un String.matches. Le second comparant avec 
un expression régulière plutôt qu'avec une valeur exacte.

Selon moi, ça devrait permettre de faire des sdx:terms avec des truncature (B*) 
en se basant sur une requête précedente.

Je vous tiens au courant.

Bonne journée

Dave



-----Message d'origine-----
De : address@hidden
[mailto:address@hidden la
part de Castonguay Dave
Envoyé : 23 mars, 2005 09:51
À : address@hidden
Objet : RE: [sdx-users] Problème sdx:filter


Re à tous :)


Merci pour les réponses!

J'ai essayé ce que Pierre a suggéré. Je me suis vite apperçu que j'avais besoin 
d'un executeQuery :)
Ça fonctionne bien. :)

Sauf que pour le moment ma base est vide et vos inquiétudes faces aux 
performances me font un peu peur :(

Autre chose qui est malheureuse pour moi, c'est que en passant un paramètre 
"qid" à sdx:terms, on  perd la possibilité
de de passer des truncature (B*). Ce dont j'avais besoin car ces pages sont 
orgnaisé par liste alpha (où on offre des liens sur les lettres ayant des 
termes).

On voit dans la logicsheet:
   sdx_object=getSessionObject(session, sdx_parameter);
   if (sdx_object != null &amp;&amp; sdx_object instanceof Results)
   {
     sdx_results=(Results)sdx_object;
    if (sdx_results != null) sdx_terms.setUp(sdx_results, sdx_fields[0], 
sdx_values[0]);
   }

On remarque que l'onne passe que le premier élément des sdx_fields[] et 
sdx_values[].
Ce qui rend impossible (aucun résultats):

         <sdx:terms  qidString="myQid">
                          <sdx:parameter name="field" valueParam="field" />
                          <sdx:parameter name="value" valueParam="value" />
                        <!-- value est A*, B*, C*, etc... -->
                 
                          <sdx:parameter name="field" valueParam="field" />

                 
                     <sdx:location base="notice"/>
       </sdx:terms>
 
Mais ce code fonctionne très bien si on ne passe pas le qid.

Par contre, je ne comprend pas pourquoi le code suivant ne fonctionne pas:

         <sdx:terms  qidString="myQid" fieldParam="field" valueParam="value"/>

Des idées?

Ce que je vais faire pour le moment,
c'est de faire des test en modifiant la logicsheet pour que l'on passe tous les 
sdx_fields et tous les sdx_values à la méthode setUp de Terms. Je vais voir 
comment ça réagit mais de ce que j'ai vu/compris de la classe Terms, ça ne 
dervait pas changer grand chose.

Je vous tiens au courant :)

Bonne journée

Dave


-----Message d'origine-----
De : address@hidden
[mailto:address@hidden la
part de Pierrick Brihaye
Envoyé : 23 mars, 2005 03:22
À : address@hidden
Objet : Re: [sdx-users] Problème sdx:filter


Salut,

Malo Pichot a écrit :

>>> <sdx:simpleQuery query="type_document:Sonore type_document:Braille" />
>>> String myQueryId = sdx_qid;
>>> <sdx:terms field="sujet" qidString="myQueryId"/>
> 
> Je rectifie ; la syntaxe ici ne devrait pas fonctionner : sdx_qid n'est 
> pas créer avec <sdx:simleQuery>. C'est le boulot de <sdx:results /> ou 
> de toute <sdx:execute*Query />.

Oui. Je m'etonne d'ailleurs d'avoir oublié ce execute.

 > On peut employer :
> 
> <sdx:simpleQuery query="type_document:Sonore type_document:Braille" />
> <sdx:results qid="myQueryId" hpp="0" />

Bien vu. Le hpp="0" fera gagner un peu de performance (20 résultats de 
moins dans le tuyau).

 ><sdx:terms field="sujet" qidString="myQueryId"/>

Gaffe : il manque le String myQueryId = sdx_qid; que l'on peut 
factoriser probablement ainsi :

<sdx:terms field="sujet" qidString="sdx_qid"/>

... mais c'est plus difficile à déboguer.

En ce qui concerne la performance, je partage les scrupules de Martin, 
surtout dans le cas proposé qui effectue préalablement une requête "OR". 
Ca oblige à un produit cartésien assez dispendieux.

Si je ne me trompe pas, on a tout de même une possibilité, pas très 
élégante, de "filtrage" dans <sdx:terms>. Il "suffit" d'utiliser une 
troncature :

<sdx:terms field="sujet" value="a*" />

ou, plus généralement, si j'en crois le code, une expression régulière 
(v. 
http://savannah.nongnu.org/cgi-bin/viewcvs/sdx/sdx_v2/src/java/fr/gouv/culture/sdx/search/lucene/query/Terms.java?annotate=1.73,
 
ligne 208).

Cela permet de restreindre les termes éligibles et, le cas échéant, 
d'organiser un paging :

a-h i-m n-s t-z par exemple...

A+

-- 
Pierrick Brihaye, informaticien
Service régional de l'Inventaire
DRAC Bretagne
mailto:address@hidden
+33 (0)2 99 29 67 78


_______________________________________________
sdx-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/sdx-users

AVIS DE CONFIDENTIALITÉ - AVERTISSEMENT RELATIF À LA LOI SUR L'ACCÈS AUX 
DOCUMENTS DES ORGANISMES PUBLICS ET SUR LA PROTECTION DES RESEIGNEMENTS 
PERSONNELS (L.R.Q.,c.A.-2.1): L'information transmise avec ce courrier 
électronique est de nature privilégiée et confidentiellle. Elle est destinée à 
l'usage exclusif de son destinataire. Si vous n'êtes pas le destinataire visé, 
vous êtes par la présente avisé qu'il est strictement interdit d'utiliser cette 
information, de la copier, la distribuer ou la diffuser. Veuillez s'il vous 
plaît contacter l'expéditeur initial du courrier électronique et le détruire de 
votre ordinateur.





_______________________________________________
sdx-users mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/sdx-users




reply via email to

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