2013-03-27 7 views
10

Ho un programma client che genera un documento Solr da 1 a 50 milioni e li aggiunge a Solr.
Sto utilizzando ConcurrentUpdateSolrServer per inviare i documenti dal client, 1000 documenti per richiesta.
I documenti sono relativamente piccoli (pochi campi di testo di piccole dimensioni).
Desidero migliorare la velocità di indicizzazione.
Ho provato ad aumentare "ramBufferSizeMB" a 1G e "mergeFactor" a 25 ma non ho visto alcuna modifica.
Mi chiedevo se ci sono altre impostazioni consigliate per migliorare la velocità di indicizzazione di Solr.
Si apprezzeranno eventuali collegamenti a materiali pertinenti.Come configurare Solr per una migliore velocità di indicizzazione

risposta

8

Sembra che si stia eseguendo un'importazione in serie di dati in Solr, quindi non è necessario cercare immediatamente alcun dato.

Innanzitutto, è possibile aumentare il numero di documenti per richiesta. Dal momento che i tuoi documenti sono piccoli, lo aumenterei addirittura a 100.000 documenti per richiesta o più e proverei.

In secondo luogo, si desidera ridurre il numero di volte che i commit si verificano quando si esegue l'indicizzazione di massa. Nella vostra solrconfig.xml cercare:

<!-- AutoCommit 

    Perform a hard commit automatically under certain conditions. 
    Instead of enabling autoCommit, consider using "commitWithin" 
    when adding documents. 

    http://wiki.apache.org/solr/UpdateXmlMessages 

    maxDocs - Maximum number of documents to add since the last 
       commit before automatically triggering a new commit. 

    maxTime - Maximum amount of time in ms that is allowed to pass 
       since a document was added before automatically 
       triggering a new commit. 

    openSearcher - if false, the commit causes recent index changes 
    to be flushed to stable storage, but does not cause a new 
    searcher to be opened to make those changes visible. 
    --> 
<autoCommit> 
    <maxTime>15000</maxTime> 
    <openSearcher>false</openSearcher> 
</autoCommit> 

È possibile disattivare autoCommit del tutto e quindi chiamare un commit dopo che tutti i documenti sono pubblicati. Altrimenti puoi modificare i numeri come segue:

Il valore predefinito maxTime è 15 secondi, quindi un commit automatico avviene ogni 15 secondi se ci sono documenti non salvati, quindi puoi impostarlo su qualcosa di grande, diciamo 3 ore (cioè 3 * 60 * 60 * 1000). È inoltre possibile aggiungere <maxDocs>50000000</maxDocs>, il che significa che un commit automatico si verifica solo dopo aver aggiunto 50 milioni di documenti. Dopo aver pubblicato tutti i tuoi documenti, chiama il commit una volta manualmente o da SolrJ - ci vorrà un po 'di tempo per eseguire il commit, ma nel complesso sarà molto più veloce.

Anche dopo aver terminato l'importazione di massa, ridurre maxTime e maxDocs, in modo che i post incrementali che verranno eseguiti in Solr vengano eseguiti molto prima. O utilizzare commitWithin come indicato in solrconfig.

+0

È possibile che si esaurisca la memoria se i commit sono completamente disabilitati. Ma non riaprire l'utente è una buona idea. –

+0

Ciao Puoi consigliare come configurarlo in modo che non riaprire il ricercatore? – Krunal

+0

' false' non aprirà un nuovo ricercatore dopo che è avvenuto un commit automatico. – arun