Usar schema.xml en lugar de un esquema administrado con Solr 5.1.X
(3)
Estoy tratando de usar schema.xml con la última versión de Solr (5.1.0). Parece que, de forma predeterminada, Solr 5.1.0 usa un esquema administrado, pero me gustaría usar schema.xml para una colección específica.
Así que creo una nueva colección (usando solr create -c my_collection en windows y copio schema.xml desde
server/solr/configsets/basic_configs/conf/schema.xml
a
server/solr/my_collection/conf/schema.xml
Después de eso cambio la configuración en
server/solr/my_collection/conf/solrconfig.xml
usar
<schemaFactory class="ClassicIndexSchemaFactory"/>
Después de hacer esto obtengo una excepción al iniciar el servidor:
org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: fieldType ''booleans'' not found in the schema
¿Estoy haciendo algo terriblemente mal aquí? ¿No debería funcionar este tipo de lógica?
ACTUALIZACIÓN: Strtrace se ve así:
org.apache.solr.common.SolrException: fieldType ''booleans'' not found in the schema
at org.apache.solr.core.SolrCore.<init>(SolrCore.java:885)
at org.apache.solr.core.SolrCore.<init>(SolrCore.java:652)
at org.apache.solr.core.CoreContainer.create(CoreContainer.java:518)
at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:283)
at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:277)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.solr.common.SolrException: fieldType ''booleans'' not found in the schema
at org.apache.solr.update.processor.AddSchemaFieldsUpdateProcessorFactory$TypeMapping.populateValueClasses(AddSchemaFieldsUpdateProcessorFactory.java:244)
at org.apache.solr.update.processor.AddSchemaFieldsUpdateProcessorFactory.inform(AddSchemaFieldsUpdateProcessorFactory.java:170)
at org.apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:620)
at org.apache.solr.core.SolrCore.<init>(SolrCore.java:868)
El problema es que está haciendo referencia a un tipo de campo booleans
que no está definido en su archivo schema.xml
. Al crear un núcleo, se crea un archivo managed-schema
en server/solr/my_collection/conf/
. Cambie el nombre de este archivo a schema.xml
y reinicie solr con ClassicIndexSchemaFactory
y funcionará bien.
El problema que tenía aquí no tenía nada que ver con el uso del tipo de campo booleans
. El problema fue que el archivo solrconfig.xml
recién actualizado tiene un procesador para campos desconocidos habilitados de forma predeterminada, que necesita el tipo de campo booleans
, y probablemente algunos otros.
Todos estos están definidos de forma predeterminada en el nuevo ejemplo schema.xml
, pero posiblemente no en su antiguo schema.xml
.
La solución para mí fue comentar la <updateRequestProcessorChain name="add-unknown-fields-to-the-schema">
en solrconfig.xml
.
Alternativamente, probablemente solo puede reemplazar solrconfig.xml
.
El tipo de campo {booleans} no está definido en schema.xml
.
Pasos para solucionarlo,
- Eliminar colección
- Cambie el nombre del archivo de
managed-schema
aschema.xml
- Modifique
solrconfig.xml
para reemplazar la clase schemaFactory. - a) Quite cualquier definición
ManagedIndexSchemaFactory
si existe. - b) Agregue una definición
ClassicIndexSchemaFactory
como se muestra a continuación,
<schemaFactory class="ClassicIndexSchemaFactory"/>
- Actualice
autoCreateFields
a falso ensolrconfig.xml
o obtendrá
This IndexSchema is not mutable
error This IndexSchema is not mutable
.
${update.autoCreateFields:false}
- Recrear colección.