2012-08-29 13 views
25

Solr 4 beta está fuera, la versión de GA seguirá pronto. Las actualizaciones parciales de documentos han estado disponibles por un tiempo, como se explica aquí: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/solrj api para la actualización de documento parcial

Sin embargo, no he descubierto cómo hacerlo con solrj api.

¿Alguien sabe si es posible con solrj? ¿O simplemente no está actualizado con esta función?

actualización: como lo describo en la lista de correo (véase la respuesta here), encontré que en la API SolrJ, el valor de una SolrInputField puede ser un mapa - que no tiene que ser un valor escalar sencilla . Si es un mapa, solrj agrega un atributo adicional update al elemento xml del campo. Por ejemplo, este código:

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); 

produce este documento:

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

En este ejemplo he utilizado la palabra "ajuste" para este atributo adicional, pero no funciona. Solr no actualiza el campo como esperaba. Según este enlace: http://solr.pl/en/2012/07/09/solr-4-0-partial-documents-update/ los valores válidos son "establecer" y "agregar".

¿Alguna idea?

+1

Esto podría ayudar a [Solr-actualización] [1] [1]: http://stackoverflow.com/questions/8365713/solr-update-specific-fields-rather-than -entire-document – prashant

+0

@prashant la respuesta en esa pregunta está desactualizada. Hay otra respuesta en un duplicado de esa pregunta, pero tampoco ayuda – Yoni

+0

, puede insertar una lista de valores usando 'ArrayList', luego la' partialUpdate' se declarará como 'Map partialUpdate = new HashMap (); 'y la clave como' add' – veer7

Respuesta

29

Como resultado, el fragmento de código que se muestra arriba en la pregunta realmente funciona. No sé qué fue lo que pasó la primera vez que lo intenté, tal vez simplemente olvidé comprometerme o mi esquema estaba mal configurado.

En cualquier caso, esta pregunta está muy localizada. Sin embargo, dado que la API con el hash map está tan poco documentada, pensé que tal vez valiera la pena mantener esta pregunta y respuesta.

La clave del mapa hash puede ser uno de tres valores:

  • conjunto - para establecer un campo.
  • agregar - para agregar a un campo de valores múltiples.
  • inc - para incrementar un campo.

Hay un ejemplo de este código en las pruebas de la unidad solrj, en un método llamado testUpdateField.

+1

Para actualizar un campo multivalor con valores múltiples, cree un 'Map >' como en 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 puede colgar a alguien –

+0

eliminar y eliminarregex también son valores posibles para el hash https://cwiki.apache.org/confluence/display/solr/Updating+Parts+of+Documents – ilinca

Cuestiones relacionadas