2010-08-06 9 views
9

Sto provando a interrogare Solr per le voci che hanno un determinato valore in un campo O nessun valore per il campo. Il valore del campo negato funziona quando usato da solo, ma fa sì che la query non restituisca risultati quando combinata con qualcos'altro. Di seguito è riportata una risposta con debugQuery abilitato. Il file di configurazione che uso può essere trovato here.interrogazione Solr per gli articoli con campo: valore o nessun valore per il campo per tutto

<?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> 

Qualsiasi aiuto sarebbe apprezzato.

risposta

15

infine formulato la questione abbastanza bene per trovare una risposta tramite Google.

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

OR NOT query possono essere scritte come, usando il mio caso come un esempio:

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

Questo è stato grande aiuto per me - grazie. Riesci a ricordare quali parole chiave hai utilizzato in Google per scoprire questo per favore? –

+0

Upvoting. Grazie per aver trovato il tempo di tornare per rispondere alla tua stessa domanda. – sbrattla

Problemi correlati