Je cherche à faire une requête avec l'opérateur Not mais mes résultats ne sont pas bon, a priori la requête est mal retranscrite pour solr. search = Search.query(); search.eq(AgentSkill.FQ_FIELD_AGENTSKILL_AGENT, agentId); Search searchNot = search.not(); searchNot.contains(WikittyAuthorisation.FIELD_WIKITTYAUTHORISATION_READER, privateGroup.getWikittyId()); A priori ça me donne un criteria qui colle : <?xml version="1.0" encoding="UTF-8"?> <java version="1.6.0_22" class="java.beans.XMLDecoder"> <object class="org.nuiton.wikitty.search.Criteria"> <void property="restriction"> <object class="org.nuiton.wikitty.search.operators.And"> <void property="name"> <object class="org.nuiton.wikitty.search.operators.RestrictionName" method="valueOf"> <string>AND</string> </object> </void> <void property="restrictions"> <object class="java.util.ArrayList"> <void method="add"> <object class="org.nuiton.wikitty.search.operators.Equals"> <void property="element"> <object class="org.nuiton.wikitty.search.operators.Element"> <void property="name"> <string>AgentSkill.agent</string> </void> </object> </void> <void property="name"> <object class="org.nuiton.wikitty.search.operators.RestrictionName" method="valueOf"> <string>EQUALS</string> </object> </void> <void property="value"> <string>d2f9ff2f-a69c-4735-8148-e6949bac487a</string> </void> </object> </void> <void method="add"> <object class="org.nuiton.wikitty.search.operators.Not"> <void property="name"> <object class="org.nuiton.wikitty.search.operators.RestrictionName" method="valueOf"> <string>NOT</string> </object> </void> <void property="restriction"> <object class="org.nuiton.wikitty.search.operators.Contains"> <void property="element"> <object class="org.nuiton.wikitty.search.operators.Element"> <void property="name"> <string>reader</string> </void> </object> </void> <void property="name"> <object class="org.nuiton.wikitty.search.operators.RestrictionName" method="valueOf"> <string>CONTAINS</string> </object> </void> <void property="value"> <object class="java.util.LinkedList"> <void method="add"> <string>81fba23e-bb2d-4ed0-b31f-a88b0e3968a1</string> </void> </object> </void> </object> </void> </object> </void> </object> </void> </object> </void> </object> </java> par contre, la requête solR semble à l'ouest : 2011-01-25 17:13:59,794 [main] DEBUG org.nuiton.wikitty.storage.solr.WikittyQueryParser$SolrQParser - Query parse : ( ( AgentSkill.agent_w:d2f9ff2f\-a69c\-4735\-8148\-e6949bac487a AND ( *:* - ( *:* - *:* ) ) ) AND #extensions:AgentSkill ) la partie Not de la requête semble être retranscrite comme ceci : ( *:* - ( *:* - *:* ) ) :( Quelqu'un à une idée de ce que j'aurais pu mal faire ? Serait-ce un bug dans Wikitty ?
On Tue, 25 Jan 2011 17:31:09 +0100 Jean Couteau <couteau@codelutin.com> wrote:
Je cherche à faire une requête avec l'opérateur Not mais mes résultats ne sont pas bon, a priori la requête est mal retranscrite pour solr.
search = Search.query(); search.eq(AgentSkill.FQ_FIELD_AGENTSKILL_AGENT, agentId); Search searchNot = search.not(); searchNot.contains(WikittyAuthorisation.FIELD_WIKITTYAUTHORISATION_READER, privateGroup.getWikittyId());
Je ne suis pas sur que ta requete soit bonne, car tu utilises contains et au final du ne met qu'un id de group, il faudrait plutot ecrire: neq(WikittyAuthorisation.FIELD_WIKITTYAUTHORISATION_READER, privateGroup.getWikittyId()) au lieu du not() et de ce qui suit ...
par contre, la requête solR semble à l'ouest :
2011-01-25 17:13:59,794 [main] DEBUG org.nuiton.wikitty.storage.solr.WikittyQueryParser$SolrQParser - Query parse : ( ( AgentSkill.agent_w:d2f9ff2f\-a69c\-4735\-8148\-e6949bac487a AND ( *:* - ( *:* - *:* ) ) ) AND #extensions:AgentSkill )
la partie Not de la requête semble être retranscrite comme ceci : ( *:* - ( *:* - *:* ) ) :(
c'est bizarre, normalement d'apres le code, ca devrait plutot sortir: ( ( AgentSkill.agent_w:d2f9ff2f\-a69c\-4735\-8148\-e6949bac487a AND ( *:* - WikittyAuthorisation.reader_w:(id1 OR id2 OR id3)) ) et surtout dans ta requete solr on ne vois pas du tout de wikittyAuthorisation, tu es sur d'avoir mis la bonne requete dans le mail ? -- Benjamin POUSSIN -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com http://www.codelutin.com
Le 26/01/2011 12:31, Benjamin POUSSIN a écrit :
Je ne suis pas sur que ta requete soit bonne, car tu utilises contains et au final du ne met qu'un id de group, il faudrait plutot ecrire:
neq(WikittyAuthorisation.FIELD_WIKITTYAUTHORISATION_READER, privateGroup.getWikittyId())
au lieu du not() et de ce qui suit
Nickel, ça marche comme ça, pour moi le contains à 1 élément servait à ça. Il sert à quoi du coup si c'est pas ça ?
c'est bizarre, normalement d'apres le code, ca devrait plutot sortir:
( ( AgentSkill.agent_w:d2f9ff2f\-a69c\-4735\-8148\-e6949bac487a AND ( *:* - WikittyAuthorisation.reader_w:(id1 OR id2 OR id3)) )
et surtout dans ta requete solr on ne vois pas du tout de wikittyAuthorisation, tu es sur d'avoir mis la bonne requete dans le mail ?
Oui oui Merci Jean
participants (2)
-
Benjamin POUSSIN -
Jean Couteau