Ho un core con milioni di record.
Desidero aggiungere un gestore personalizzato che esegue la scansione dei documenti esistenti e aggiorna uno dei campi in base a una condizione (età> 12 per esempio).
Preferisco farlo sul lato server Solr per evitare l'invio di milioni di documenti al client e viceversa.
Stavo pensando di scrivere un plugin solr che riceverà una query e aggiornerà alcuni campi sui documenti della query (come l'eliminazione per gestore di query).
Mi chiedevo se esistono soluzioni esistenti o alternative migliori.
Cercai il web per un po 'e non sono riuscito a trovare esempi di plugin Solr che aggiornano i documenti (non è necessario estendere il gestore di aggiornamento).
Ho scritto un plug-in che usa il seguente codice che funziona bene ma non è veloce quanto mi serve.
Attualmente faccio:Come aggiornare i documenti Solr sul lato server Solr con gestore/plug-in personalizzato
AddUpdateCommand addUpdateCommand = new AddUpdateCommand(solrQueryRequest);
DocIterator iterator = docList.iterator();
SolrIndexSearcher indexReader = solrQueryRequest.getSearcher();
while (iterator.hasNext()) {
Document document = indexReader.doc(iterator.nextDoc());
SolrInputDocument solrInputDocument = new SolrInputDocument();
addUpdateCommand.clear();
addUpdateCommand.solrDoc = solrInputDocument;
addUpdateCommand.solrDoc.setField("id", document.get("id"));
addUpdateCommand.solrDoc.setField("my_updated_field", new_value);
updateRequestProcessor.processAdd(addUpdateCommand);
}
ma questo è molto costoso in quanto il gestore aggiornamento prendere di nuovo il documento che Possiedo già a portata di mano.
C'è un modo sicuro per aggiornare il documento lucene e scriverlo mentre si tiene conto di tutto il codice relativo Solr come cache, logica extra solr ecc.?
Stavo pensando di convertirlo in un SolrInputDocument e quindi basta aggiungere il documento tramite Solr ma prima devo convertire tutti i campi.
Grazie in anticipo, Avner
Probabilmente lo sapete già, ma in Solr, l'atto di aggiornare un documento significa davvero sostituire il documento originale con un documento aggiornato contenente i valori modificati. Il solito modo di gestire le modifiche consiste nel passare dal sistema di origine all'indice, in genere in base a una data oa qualche altra indicazione; non aggiornare in qualche modo l'indice localmente. Puoi dare un po 'più di contesto per quello che stai cercando di fare? – icey502
Sono a conoscenza dell'eliminazione/aggiunta di materiale. Nel mio scenario ci sono dati che esistono solo nell'indice Solr (campo calcolato). Successivamente ho bisogno di aggiungere alcuni dati in un campo per tutti i documenti che rispondono a una query basata sul campo calcolato (nell'esempio il campo "Età"). È così complesso aprire uno scrittore sul lato Solr e cambiare documenti? –
Non ho affrontato questo scenario esatto, ma assumendo il "trigger" per il valore modificato (e successivo aggiornamento) è di per sé un aggiornamento dell'indice, forse questo link sarà utile: http://stackoverflow.com/questions/6593887/solr -e-custom-update-handler – icey502