[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [sdx-users] sauf?
From: |
Pierrick Brihaye |
Subject: |
Re: [sdx-users] sauf? |
Date: |
Tue, 04 Mar 2003 09:42:06 +0100 |
User-agent: |
Mozilla/5.0 (Windows; U; Win98; fr-FR; rv:1.0.1) Gecko/20020823 Netscape/7.0 |
Re,
Emmanuel Bégué a écrit:
Soit une xsp qui contient une complexQuery avec:
<sdx:simpleQuery field="contenu" valueParam="q" op="and"/>
et <sdx:simpleQuery field="geos" queryParam="lieu" op="and"/>
OK.
<sdx:query type="complex" engine="lucene"
luceneQuery="(+(+croix -geos:italie))"
operator="or">
<sdx:query type="complex" engine="lucene"
luceneQuery="+(+croix -geos:italie)"
operator="and">
Mmmh... bizarre ces 2 complexQuery imbriquées, celle de niveau supérieur
n'ajoutant qu'un parenthésage inutile.
J'avais remarqué ça dans la taglib ; j'en ai maintenant une vue plus
concrète :-) Peut-être que c'est prévu pour les requêtes combinées ?!
<sdx:query type="simple" engine="lucene"
luceneQuery="+croix -geos:italie"
text="croix -geos:italie"
op="and"/>
En revanche, cette simpleQuery me paraît tout à fait conforme à ce qui
est attendu.
</sdx:query>
</sdx:query>
Mais si je l'interroge comme ça:
?q=croix&lieu=-italie
<sdx:query type="complex" engine="lucene"
luceneQuery="(+croix +(-geos:italie))"
operator="or">
<sdx:query type="complex" engine="lucene"
luceneQuery="+croix +(-geos:italie)"
operator="and">
Même topo que ci-dessus.
<sdx:query type="simple" engine="lucene"
luceneQuery="croix" text="croix" op="and"/>
<sdx:query type="simple" engine="lucene"
luceneQuery="-geos:italie" text="-italie"
op="and"/>
Ici, ça semble également OK du point de vue de l'interprétation.
</sdx:query>
</sdx:query>
=> comment utiliser "sauf" dans le deuxième cas?
Normalement, ça devrait pouvoir se faire via un "complexop" mais,
d'après le code, on n'a que "or" ou "and" (ce qui est logique si on veut
de la performance).
En fait, je pense (en fait, j'en suis quesiment sûr) que ça tient au
fait que la deuxième simpleQuery ait un opérateur "NOT" qui s'applique à
un seul terme ; et Lucene n'aime pas ça (toujours pour des raisons de
performance).
Extrait de http://jakarta.apache.org/lucene/docs/queryparsersyntax.html :
Note: The NOT operator cannot be used with just one term. For example, the
following search will return no results:
NOT "jakarta apache"
... ce qui correspond exactement au comportement que tu recontres (parce
que la complexQuery qui est au-dessus travaille en "and").
Je te suggère de combiner ta deuxième simpleQuery avec sdxall:1 (i.e.
"sdxall:1 - geos:italie"); ça devrait tourner : sdxall a été
spécifiquement conçu pour ça ;-)
Il faudrait voir, du côté des développeurs, si on ne peut pas générer
automatiquement ce greffage de "sdxall:1"...
A bientôt,
--
Pierrick Brihaye, informaticien
Service régional de l'Inventaire
DRAC Bretagne
mailto:address@hidden