6

Sto riscontrando un problema con Apache Solr in cui sto ricevendo campi racchiusi in elenchi in risposte JSON ma dovrebbero essere singolari. Ecco un exerpt da schema.xml, due campi di esempio dandomi un problema sono django_ct e django_id:I campi in risposta apache solr sono multivalore quando dovrebbero essere singolari

<fields> 
    <!-- general --> 
    <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/> 
    <field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/> 
    <field name="django_id" type="string" indexed="true" stored="true" multiValued="false"/> 

Ecco un esempio di come i dati vengono inviati al Solr:

<doc> 
    <field name="id">search.productcategory.3</field> 
    <field name="gender">M</field> 
    <field name="name">OBQYHSOQLWOUEHRMPSDI</field> 
    <field name="text">M\nOBQYHSOQLWOUEHRMPSDI</field> 
    <field name="django_id">3</field> 
    <field name="django_ct">search.productcategory</field> 
</doc> 

Ed è qui un esempio del file memorizzato nella solr:

"response": { 
    "numFound": 1, 
    "start": 0, 
    "docs": [ 
     { 
     "django_ct": [ 
      "search.productcategory" 
     ], 
     "name": [ 
      "Example" 
     ], 
     "text": [ 
      "Male\nExample" 
     ], 
     "id": "search.productcategory.2", 
     "gender": [ 
      "Male" 
     ], 
     "django_id": [ 
      2 
     ], 
     "_version_": 1502081283634757600 
     } 
    ] 
    } 

ciò che sta causando questi campi per essere avvolti nelle liste? Nello schema, l'attributo multiValued per questi campi è impostato su falso. A parte la creazione del core e la sostituzione di schema.xml, tutto il resto è subito pronto per l'uso. Sto accedendo a Solr usando Haystack (un plugin Django), il codice si aspetta di ricevere singoli valori per questi campi ma è completamente rotto da questo. Tracciare il problema sembra essere dovuto alla configurazione di Solr.

Edit: Ecco il contenuto completo del solr.log, tutto questo è stato registrato dopo l'avvio del server, l'esecuzione di un paio di esempi di query aveva nessuna uscita:

INFO - 2015-05-27 08:38:12.563; [ ] org.eclipse.jetty.server.Server; jetty-8.1.10.v20130312 
INFO - 2015-05-27 08:38:12.586; [ ] org.eclipse.jetty.deploy.providers.ScanningAppProvider; Deployment monitor /Users/sampeka/solr-5.1.0/server/contexts at interval 0 
INFO - 2015-05-27 08:38:12.593; [ ] org.eclipse.jetty.deploy.DeploymentManager; Deployable added: /Users/sampeka/solr-5.1.0/server/contexts/solr-jetty-context.xml 
INFO - 2015-05-27 08:38:13.629; [ ] org.eclipse.jetty.webapp.StandardDescriptorProcessor; NO JSP Support for /solr, did not find org.apache.jasper.servlet.JspServlet 
INFO - 2015-05-27 08:38:13.682; [ ] org.apache.solr.servlet.SolrDispatchFilter; SolrDispatchFilter.init()[email protected] 
+0

Stai accedendo al solr dal pagliaio utilizzando SearchQuerySet? Se sì, puoi incollare i filtri usati per accedere a solr. Cerca anche solr.log e individua le voci del registro quando esegui la ricerca sopra. Mostrerà i parametri esatti inviati a Solr - il che darà abbastanza indizi per eseguire il debug di questo ulteriore. –

+0

La risposta che ho postato è stata presa direttamente da Solr utilizzando l'interfaccia di amministrazione ed è coerente con il problema che stavo avendo accesso attraverso il pagliaio. SearchQuerySets sono rotti a causa di questo. –

+0

Ho anche postato il contenuto di solr.log sopra. –

risposta

7

arrivati ​​alla radice del problema . Il problema era che solrconfig.xml non era configurato correttamente. Per impostazione predefinita, la classe schemafactory è impostata su ManagedIndexSchemaFactory che sostituisce l'uso di schema.xml. Modificando lo schemaFactory nella classe ClassicIndexSchemaFactory, si impone l'utilizzo di schema.xml e lo schema diventa immutabile dalle chiamate API.