solr indexing schema-design

¿Es posible cambiar el analizador especificado en el esquema en Solr sin reindexar desde la fuente original?



indexing schema-design (3)

Encontré una manera de usar SolrJ.

SolrQuery query = new SolrQuery(); query.setQuery( "whatever_by_id" ); QueryResponse rsp; rsp = server.query(query); Iterator<SolrDocument> iter = rsp.getResults().iterator(); while (iter.hasNext()) { SolrDocument resultDoc = iter.next(); String id = (String) resultDoc.getFieldValue("oid"); //id is the uniqueKey field SolrInputDocument inputdoc = new SolrInputDocument() ; for( Map.Entry<String, Object> f : resultDoc.entrySet()) { inputdoc.setField(f.getKey(), f.getValue()) ; } server.deleteById(id) ; server.commit() ; Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); docs.add(inputdoc) ; server.add(docs) ; server.commit() ; }

Cuando agregamos el "nuevo" inputdoc (una copia del antiguo resultDoc), utiliza el nuevo analizador que hemos cambiado en el esquema para indexar. No es muy elegante, pero funciona.

En Solr, si tenemos un campo en el esquema con stored = "true", y cambiamos el analizador asociado con ese campo, ¿es posible actualizar solo este campo sin reindexar todos los documentos? ¿Podría hacerse esto utilizando los valores "almacenados" del campo con el nuevo analizador sin tener que volver a la fuente de datos original?


Guy, optimicé tu código.

... while (iter.hasNext()) { ... //server.deleteById(id) ; //server.commit() ; Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>(); docs.add(inputdoc) ; server.add(docs) ; // server.commit() ; } server.commit() ;