django apache solr django-haystack solr-multy-valued-fields

django - Los campos en la respuesta del solr de Apache son multivalor cuando deben ser singulares



django-haystack solr-multy-valued-fields (1)

Tengo un problema con Apache Solr en el que recibo campos envueltos en listas en respuestas JSON, pero deben ser singulares. Aquí hay un resumen de schema.xml, dos campos de ejemplo que me dan un problema son django_ct y django_id :

<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"/>

Aquí hay un ejemplo de cómo se publican los datos en 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>

Y aquí hay un ejemplo del archivo almacenado en 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 } ] }

¿Qué está causando que estos campos estén envueltos en listas? En el esquema, el atributo multiValued para estos campos se establece en falso. Además de crear el núcleo y reemplazar schema.xml, todo lo demás está listo para usar. Estoy accediendo a Solr usando Haystack (un plugin de Django), el código espera recibir valores únicos para estos campos, pero está completamente roto por esto. La localización del problema parece deberse a la configuración de Solr.

Editar: Aquí están los contenidos completos de solr.log, todo esto fue registrado después de iniciar el servidor, ejecutando un par de consultas de ejemplo sin salida:

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()WebAppClassLoader=1121453612@42d8062c


Llegué a la raíz del problema. El problema era que solrconfig.xml no estaba configurado correctamente. De forma predeterminada, la clase schemafactory está configurada en ManagedIndexSchemaFactory que anula el uso de schema.xml . Al cambiar schemaFactory por clase ClassicIndexSchemaFactory , fuerza el uso de schema.xml y hace que el esquema sea inmutable mediante llamadas API.