2012-08-29 15 views
25

Solr 4 beta è fuori, la versione GA seguirà presto. Gli aggiornamenti dei documenti parziali sono in corso da un po 'come spiegato qui: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/solrj api per aggiornamento documento parziale

Tuttavia, non ho capito come farlo con solrj api.

Qualcuno sa se è possibile con solrj? Oppure è sufficiente non essere al passo con questa funzione?

aggiornamento: come ho descritto nella mailing list (si veda la risposta here), ho scoperto che nel api solrj, il valore di un SolrInputField può essere una mappa - non deve essere un valore scalare semplice . Se è una mappa, solrj aggiunge un ulteriore attributo update all'elemento xml del campo. Per esempio, Questo codice:

SolrInputDocument doc = new SolrInputDocument(); 
Map<String, String> partialUpdate = new HashMap<String, String>(); 
partialUpdate.put("set", "foo"); 
doc.addField("id", "test_123"); 
doc.addField("description", partialUpdate); 

cede questo documento:

<doc boost="1.0"> 
    <field name="id">test_123</field> 
    <field name="description" update="set">foo</field> 
</doc> 

In questo esempio ho usato la parola "set" per questo attributo aggiuntivo, ma non funziona. Solr non aggiorna il campo come mi aspettavo. Secondo questo link: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/ i valori validi sono "set" e "add".

Qualche idea?

+1

Questo potrebbe aiutare a [solr-update] [1] [1]: http://stackoverflow.com/questions/8365713/solr-update-specific-fields-rather-than -ire-document – prashant

+0

@prashant la risposta in quella domanda è superata. C'è un'altra risposta in un duplicato di quella domanda, ma non aiuta né lo – Yoni

+0

è possibile inserire l'elenco di valori usando 'ArrayList', quindi' partialUpdate' sarà dichiarato come 'Mappa partialUpdate = new HashMap (); 'e la chiave come' add' – veer7

risposta

29

Come risulta, lo snippet di codice mostrato sopra nella domanda funziona effettivamente. Non so cosa sia stato sbagliato la prima volta che l'ho provato, forse ho semplicemente dimenticato di eseguire il commit o il mio schema non è stato configurato correttamente.

In ogni caso, questa domanda è molto localizzata. Tuttavia, poiché l'API con la mappa hash è così scarsamente documentata, ho pensato che forse vale la pena di mantenere questa domanda e risposta.

La chiave della mappa di hash può essere uno dei tre valori:

  • set - per impostare un campo.
  • add - per aggiungere a un campo multivalore.
  • inc - per incrementare un campo.

C'è un esempio di questo codice nei test di unità solrj, in un metodo chiamato testUpdateField.

+1

Per aggiornare un campo multivalore con più valori, creare una 'Mappa >' come in https://issues.apache.org/jira/browse/SOLR-4134?page=com.atlassian.jira .plugin.system.issuetabpanels: comment-tabpanel & focusedCommentId = 13537900 # comment-13538174 – juanmirocks

+4

[link] http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client /solrj/SolrExampleTests.java può arrestare qualcuno –

+0

rimuovere e removeregex sono anche possibili valori per l'hash https://cwiki.apache.org/confluence/display/solr/Updating+Parts+of+Documents – ilinca

Problemi correlati