2015-06-05 14 views
15

Sto cercando di utilizzare schema.xml con l'ultima versione di Solr (5.1.0). Sembra che per impostazione predefinita Solr 5.1.0 utilizzi lo schema gestito, ma vorrei utilizzare schema.xml per una raccolta specifica.Utilizzo di schema.xml anziché schema gestito con Solr 5.1.X

Così ho creare una nuova raccolta (utilizzando solr creano mia_raccolta -c sulle finestre e copiare schema.xml da

server\solr\configsets\basic_configs\conf\schema.xml 

a

server\solr\my_collection\conf\schema.xml 

Dopo che a cambiare le impostazioni in

server\solr\my_collection\conf\solrconfig.xml 

per utilizzare

<schemaFactory class="ClassicIndexSchemaFactory"/> 

Dopo aver fatto questo ottengo un'eccezione all'avvio del server:

org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: fieldType 'booleans' not found in the schema 

sto facendo qualcosa di terribilmente sbagliato qui? Non dovrebbe funzionare questo tipo di logica?

UPDATE: Stractrace assomiglia a questo:

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) 
+0

è possibile controllare se il vostro file di schema ha questa riga jay

+0

No, sembra che ci sia tale tipo di campo. – chris544

+0

Stai usando SolrCloud? Come hai avviato i tuoi server? Puoi verificare se qualcuno dei tuoi campi utilizza i booleans del fieldtype? Ad esempio, potrebbe esserci un campo nello schema , se questo è il caso, allora devi definire anche fieldType nel tuo schema – jay

risposta

22

Il problema è che si fa riferimento un tipo di campo booleans che non è definito nel file schema.xml. Quando si crea un core, viene creato un file managed-schema in server\solr\my_collection\conf\. Rinominare questo file a schema.xml e riavviare solr con ClassicIndexSchemaFactory e funzionerà correttamente.

+0

Sì, questo ha funzionato. Potresti condividere dove ti è venuta in mente questa idea? O hai semplicemente capito che lo schema gestito e schema.xml hanno lo stesso formato? – chris544

+0

Ciao. Ho notato che un file chiamato 'managed-schema' è apparso nella mia directory' conf' e ho capito che è lo stesso del file 'schema.xml'. Questo è solo un modo risolta per rimuovere la visibilità del file 'schema' nell'API Solr quando è impostata la modalità' schemi '. –

+2

Suoni ragionevoli, ma in qualche modo non mi sembravano intuitivi (non avevo usato versioni precedenti e dovevo migrare una vecchia raccolta). Spero che questo aiuti altri sviluppatori frustrati. Grazie. – chris544

9

Il problema che avevo qui non aveva nulla a che fare con l'utilizzo del tipo di campo booleans. Il problema era che il file solrconfig.xml appena aggiornato ha un processore per i campi sconosciuti abilitato per impostazione predefinita, che richiede il tipo di campo booleans e probabilmente altri.

Questi sono tutti definiti di default nel nuovo esempio schema.xml, ma probabilmente non nel vecchio schema.xml.

La soluzione per me era di commentare la sezione <updateRequestProcessorChain name="add-unknown-fields-to-the-schema"> in solrconfig.xml.

In alternativa, è possibile sostituire semplicemente solrconfig.xml.

0

Il tipo di campo {booleans} non è definito in schema.xml.

passaggi per risolvere il problema,

  • Rimuovere collezione
  • Rinominare il file managed-schema-schema.xml
  • Modifica solrconfig.xml per sostituire la classe schemaFactory.
  • a) Rimuovere qualsiasi definizione ManagedIndexSchemaFactory se esiste.
  • b) Aggiungere una definizione ClassicIndexSchemaFactory come illustrato di seguito,

<schemaFactory class="ClassicIndexSchemaFactory"/>

  • Aggiornamento autoCreateFields su false in solrconfig.xml o si otterrà

This IndexSchema is not mutable errore.

${update.autoCreateFields:false}

  • raccolta Ricrea.
Problemi correlati