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