2012-02-08 28 views
7

Ho bisogno di aggiornare una grande quantità di documenti in Solr molto spesso. Ad esempio, imposta "online" = true per user_id = 5 e così via. Ma la velocità di indicizzazione tramite il gestore HTTP è molto lenta. Il supporto Solr elimina i documenti per query, è possibile aggiornarli per query?Aggiornamento indice Solr tramite query

+0

C'è un problema jira ben elaborato su questo argomento e sul perché non è risolto: https: //issues.apache.org/jira/browse/SOLR-7490 – cheffe

risposta

10

No, sfortunatamente non c'è nessuna funzionalità come aggiornamento per query. Sarebbe davvero utile, come una nuova funzionalità per rendere possibile l'aggiornamento di un documento senza la necessità di ripresentarlo interamente; c'è un 5 anni jira issue per quello. Per ora dovresti semplicemente inviare nuovamente i tuoi documenti con i campi aggiornati, saranno sovrascritti (significa cancellati + reinseriti) se usi lo stesso uniqueKey.

A proposito, stai facendo una richiesta http per ogni documento da aggiornare? Se sì, si può rendere più veloce la presentazione più di un documento in un momento come questo:

<add> 
    <doc> 
    <field name="employeeId">05991</field> 
    <field name="office">Bridgewater</field> 
    </doc> 
    <doc> 
    <field name="employeeId">05992</field> 
    <field name="office">Bridgewater</field> 
    </doc> 
    <doc> 
    <field name="employeeId">05993</field> 
    <field name="office">Bridgewater</field> 
    </doc> 
</add> 
1

Come javanna risposto, non v'è alcuna possibilità di aggiornare da interrogazione, come Solr, inoltre, non consente di aggiornare i singoli campi in un documento memorizzato nell'indice, quindi una re-invio è l'unico metodo di aggiornamento. Sono curioso però sul motivo per cui i tuoi aggiornamenti sono così lenti. Di seguito sono riportati alcuni modi per migliorare la velocità di aggiornamento.

  • Se l'emissione di un commit dopo l'aggiornamento ogni singolo documento, quindi attendere ed emettere solo l'aggiornamento dopo aver aggiornato un batch di documenti nell'indice. Dal Solr Tutorial:

    commit può essere un'operazione costosa quindi è meglio per fare molti cambiamenti a un indice di un batch e quindi inviare il comando commit alla fine. Esiste anche un comando di ottimizzazione che esegue la stessa operazione di commit, oltre a unire tutti i segmenti di indice in un singolo segmento, , rendendo più veloce la ricerca e la rimozione di qualsiasi documento eliminato .

  • Verificare l'utilizzo di soft commit o soft commit automatico per ridurre la latenza di aggiornamento. Si prega di fare riferimento alla pagina NearRealtimeSearch sul Wiki Solr per maggiori dettagli.

+0

Ho pensato che il processo di aggiornamento fosse lento solo a causa di molte richieste http ... Buoni suggerimenti! – javanna

0

Vorrei utilizzare DIH con query SQL modificata che accetterà i parametri dall'URL. query SQL sarà simile:

SELECT user_name, user_online FROM users WHERE user_id=${dataimporter.request.user_id} 

Poi reindicizzare utenti selezionati si sta aggiungendo il parametro user_id a URL del genere:

http://<host>:<port>/solr/dataimport?command=full-import&clean=false&user_id=5 

Docs sull'utilizzo DIH e personalizzati parametri: Solr - DataImportHandler

6

Non c'è ancora alcun aggiornamento da parte di query, ma le risposte a partire dal 2012 non sono aggiornati. Ora in Solr 4.x ci sono https://wiki.apache.org/solr/Atomic_Updates in modo da poter fare ciò che si vuole fare in due passaggi senza richiedere l'accesso al documento originale.

+0

Ci sono dei limiti per l'aggiornamento atomico. Come ha detto Erick in maillist, è ancora un aggiornamento completo del documento dietro la scena. I campi di un documento che non si elencano mentre si usa l'aggiornamento atomico devono essere "memorizzati", altrimenti i loro valori originali potrebbero andare persi dopo l'aggiornamento atomico perché penso che sia recupera i valori di tali campi non elencati dall'indice originale e li combina con i campi elencati per eseguire l'aggiornamento atomico, quindi aggiorna tutto il documento dietro la scena. (L'ultimo Solr è v6.1.0 durante la scrittura di questo commento) –