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.