sdx-users
[Top][All Lists]
Advanced

[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





reply via email to

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