solr dih

¿Puede Solr DIH hacer actualizaciones atómicas?



(1)

Con Solr 4 surgió la posibilidad de realizar actualizaciones atómicas (parciales) en documentos existentes dentro del índice. Es decir, uno puede coincidir en la identificación del documento y reemplazar el contenido de un solo campo, o agregar más entradas a campos con valores múltiples: http://wiki.apache.org/solr/Atomic_Updates

¿Se pueden realizar actualizaciones atómicas desde DataImportHandler (DIH)?


La respuesta es "sí" con ScriptTransformer, descubrí a través de prueba y error.

La documentación de Solr muestra cómo agregar un atributo de actualización a un nodo de campo con "set", "add" o "inc". Si creo un archivo XML de prueba con el atributo de actualización requerido, funciona bien cuando se pasa al controlador de actualización regular. Pero, cuando se pasa a DIH, incluso sin ninguna transformación, los atributos de actualización se ignoran por completo.

Aquí hay una versión simplificada del transformador de script que utilicé para reintroducir el atributo de actualización y lograr que funcionen las actualizaciones atómicas. Tenga en cuenta el uso de Java HashMap.

var atomicTransformer = function (row) { var authorMap = new java.util.HashMap(); var author = String(row.get(''author'')); authorMap.put(''add'', author); row.put(''author'', authorMap); };

Esto produce el siguiente JSON en el modo de depuración DIH:

{ "id": [ 123 ], "author": [ { "add": "Smith, J" } ] }

Los campos multivalor tampoco son un problema: pasar una lista de arreglos al HashMap en lugar de una cadena.

var atomicTransformer = function (row) { var fruits = new java.util.ArrayList(); fruits.add("banana"); fruits.add("apple"); fruits.add("pear"); var fruitMap = new java.util.HashMap(); fruitMap.put(''add'', fruits); row.put(''fruit'', fruitMap); }