2010-08-06 2 views
9

J'essaie d'interroger Solr pour les entrées qui ont une certaine valeur dans un champ OU aucune valeur pour le champ. La valeur de champ négative fonctionne lorsqu'elle est utilisée par elle-même, mais la requête ne renvoie aucun résultat lorsqu'elle est combinée avec autre chose. Voici une réponse avec debugQuery activé. Le fichier de configuration que j'utilise peut être trouvé here.Requête Solr pour les éléments avec champ: valeur ou aucune valeur pour la zone

<?xml version="1.0"?> 
<response> 
    <responseHeader> 
    <status>0</status> 
    <QTime>3</QTime> 
    <lst name="params"> 
     <str name="facet">true</str> 
     <str name="sort">sort_title asc</str> 
     <str name="fl">id,nid,url,uid</str> 
     <str name="debugQuery">true</str> 
     <str name="facet.mincount">1</str> 
     <str name="facet.sort">true</str> 
     <str name="start">0</str> 
     <str name="bf">recip(rord(created),4.000000,239,239)^200.000000</str> 
     <arr name="fq"> 
     <str>NOT type:article</str> 
     <str>NOT type:insect</str> 
     <str>NOT type:news</str> 
     <str>NOT type:plant</str> 
     <str>im_cck_field_affected_plants:(20 OR -[* TO *])</str> 
     <str>entity:node</str> 
     </arr> 
     <str name="version">1.2</str> 
     <str name="rows">16</str> 
    </lst> 
    </responseHeader> 
    <result name="response" numFound="0" start="0"/> 
    <lst name="facet_counts"> 
    <lst name="facet_queries"/> 
    <lst name="facet_fields"/> 
    <lst name="facet_dates"/> 
    </lst> 
    <lst name="debug"> 
    <null name="rawquerystring"/> 
    <null name="querystring"/> 
    <str name="parsedquery">+MatchAllDocsQuery(*:*) FunctionQuery((239.0/(4.0*float(top(rord(created)))+239.0))^200.0)</str> 
    <str name="parsedquery_toString">+*:* (239.0/(4.0*float(top(rord(created)))+239.0))^200.0</str> 
    <lst name="explain"/> 
    <str name="QParser">DisMaxQParser</str> 
    <str name="altquerystring">org.apache.lucene.search.MatchAllDocsQuery:*:*</str> 
    <arr name="boostfuncs"> 
     <str>recip(rord(created),4.000000,239,239)^200.000000</str> 
    </arr> 
    <arr name="filter_queries"> 
     <str>NOT type:article</str> 
     <str>NOT type:insect</str> 
     <str>NOT type:news</str> 
     <str>NOT type:plant</str> 
     <str>im_cck_field_affected_plants:(20 OR -[* TO *])</str> 
     <str>entity:node</str> 
    </arr> 
    <arr name="parsed_filter_queries"> 
     <str>-type:article</str> 
     <str>-type:insect</str> 
     <str>-type:news</str> 
     <str>-type:plant</str> 
     <str>im_cck_field_affected_plants:20 -im_cck_field_affected_plants:[* TO *]</str> 
     <str>entity:node</str> 
    </arr> 
    <lst name="timing"> 
     <double name="time">3.0</double> 
     <lst name="prepare"> 
     <double name="time">3.0</double> 
     <lst name="org.apache.solr.handler.component.QueryComponent"> 
      <double name="time">2.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.FacetComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.MoreLikeThisComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.HighlightComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.StatsComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.SpellCheckComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.DebugComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     </lst> 
     <lst name="process"> 
     <double name="time">0.0</double> 
     <lst name="org.apache.solr.handler.component.QueryComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.FacetComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.MoreLikeThisComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.HighlightComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.StatsComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.SpellCheckComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     <lst name="org.apache.solr.handler.component.DebugComponent"> 
      <double name="time">0.0</double> 
     </lst> 
     </lst> 
    </lst> 
    </lst> 
</response> 

Toute aide serait appréciée.

Répondre

15

Enfin formulé la question assez bien pour trouver une réponse via Google.

http://osdir.com/ml/solr-user.lucene.apache.org/2009-03/msg00480.html

OU PAS les requêtes peuvent être écrites comme, en utilisant mon cas comme exemple:

im_cck_field_affected_plants:20 OR (*:* -im_cck_field_affected_plants:[* TO *]) 
+0

Ce fut une grande aide pour moi - je vous remercie. Pouvez-vous vous rappeler quels mots-clés vous avez utilisés dans Google pour le découvrir s'il vous plaît? –

+0

Upvotation. Merci d'avoir pris le temps de revenir pour répondre à votre propre question. – sbrattla

Questions connexes