tutorial guide create collection json solr solr4

json - guide - solr xls



¿Cómo actualizar varios documentos en Solr con JSON? (4)

¿Cómo actualizar varios documentos en Solr 4.5.1 con JSON? Intenté esto pero no funciona:

POST /solr/mycore/update/json :

{ "commit": {}, "add": { "overwrite": true, "doc": [{ "thumbnail": "/images/404.png", "url": "/404.html?1", "id": "demo:/404.html?1", "channel": "demo", "display_name": "One entry", "description": "One entry is not enough." }, { "thumbnail": "/images/404.png", "url": "/404.html?2", "id": "demo:/404.html?2", "channel": "demo", "display_name": "Another entry", "description": "Another entry is required." } ] } }


Solr espera una clave "añadir" en la estructura JSON para cada documento (lo que puede parecer extraño, si se piensa en el significado original de la clave en el objeto), ya que se asigna directamente al formato XML al hacer la indexación - y de esta manera puede tener metadatos para cada documento por sí mismo.

{ "commit": {}, "add": { "doc": { "id": "321321", "name": "barfoo" } }, "add": { "doc": { "id": "123123", "name": "Foobar" } } }

.. trabajos. Creo que permitir una matriz como el elemento al que hace referencia "agregar" tendría más sentido, pero no he profundizado en la fuente o no conozco el razonamiento detrás de esto.


Entiendo que (al menos) de las versiones 4.0 y anteriores de Solr, esto se ha solucionado. Mira http://wiki.apache.org/solr/UpdateJSON .

En ./exampledocs/books.json hay un ejemplo de un archivo json con varios documentos.

[ { "id" : "978-0641723445", "cat" : ["book","hardcover"], "name" : "The Lightning Thief", "author" : "Rick Riordan", "series_t" : "Percy Jackson and the Olympians", "sequence_i" : 1, "genre_s" : "fantasy", "inStock" : true, "price" : 12.50, "pages_i" : 384 } , { "id" : "978-1423103349", "cat" : ["book","paperback"], "name" : "The Sea of Monsters", "author" : "Rick Riordan", "series_t" : "Percy Jackson and the Olympians", "sequence_i" : 2, "genre_s" : "fantasy", "inStock" : true, "price" : 6.49, "pages_i" : 304 }, ... ]

Si bien la respuesta de @fiskfisk sigue siendo un JSON válido, no es fácil ser serializable desde una estructura de datos. Este es.


Otra opción si está en Solr 4.10 o posterior es usar una estructura JSON personalizada y decirle a Solr cómo indexarla (no estoy seguro de cómo agregar aumentos con este método tampoco, pero es una buena opción si ya tiene una estructura de datos en JSON y no quiero convertirlo al formato de Solr). Aquí está la documentación de Solr sobre esta opción:

https://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers#UploadingDatawithIndexHandlers-TransformingandIndexingCustomJSON


elachell tiene razón en que el formato de matriz funcionará si solo está agregando documentos con la configuración predeterminada. Lamentablemente, eso no funcionará si, por ejemplo, necesita agregar un impulso personalizado a algunos de los documentos o cambiar la configuración de sobrescritura. Luego tiene que usar la estructura de objetos completa con una tecla "agregar" para cada uno de ellos, que, como señalaron, hace que sea frustrantemente molesto tratar de serializar desde la mayoría de los idiomas que no permiten la misma clave más de una vez en un objeto:

{ "commit": {}, "add": { "doc": { "id": "321321", "name": "barfoo" }, "boost": 2.0 }, "add": { "doc": { "id": "123123", "name": "Foobar" }, "boost": 1.5, "overwrite": false }

}