tutorial instalar ejemplos solr solrj solrcloud

instalar - Cómo indexar datos en un fragmento específico usando solrj



instalar solr (3)

Debe usar CloudSolrServer http://lucene.apache.org/solr/4_2_1/solr-solrj/org/apache/solr/client/solrj/impl/CloudSolrServer.html

Porque en solrcloud, las actualizaciones deben enrutarse a través del zookeeper, ya que el zookeeper conoce el estado de los líderes en la nube. Una cosa más que no necesita es agregar el nombre de la colección a la url, simplemente use setDefaultCollection (collectionName); método de CloudSolrServer para enviar sus actualizaciones a la colección ''collectionName''

Estoy usando solrj como cliente para indexar documentos en la nube de solr (usando solr4.5)

Tenía un requisito para guardar documentos basados ​​en tenant_id, por lo que estoy tratando de hacer el enrutamiento de documentos . Lo cual es posible solo si la colección se crea usando el parámetro numShards ( http://searchhub.org/2013/06/13/solr-cloud-document-routing/ )

Tengo dos instancias de solr en solr cloud (ejemplo1 / solr y ejemplo2 / solr) y exrenal zookeeper que se ejecuta en el puerto 2181.

Ambas instancias consisten en una colección llamada colección1

Creé una colección más llamada newCollection (con dos fragmentos y dos réplicas) usando http://localhost:8501/solr/admin/collectionsaction=CREATE&name=newCollection&numShards=2&replicationFactor=2&maxShardsPerNode=2&router.field=id

Entonces en el ejemplo1 / solr-> tengo newCollection_shard1_replica1 & newCollection_shard2_replica1,

En example2 / solr -> Tengo newCollection_shard1_replica2 & newCollection_shard2_replica2

Copié example1 / solr / collection1 / conf en todos los fragmentos y réplicas

Reinicié el servidor zookeeper así como las instancias de solr:

zookeeper-> zkServer.cmd

example1 / solr-> java -Dbootstrap_confdir =. / solr / newCollection_shard1_replica1 / conf -Dcollection.configName = myconf -DzkHost = localhost: 2181 -jar start.jar

example2 / solr-> java -DzkHost = localhost: 2181 -jar start.jar

(Ambas instancias se ejecutan en un puerto diferente, una está en 8081 y otra en 8051)

Estoy usando el cliente solrj para indexar documentos

Aquí está mi código de muestra

String url="http://localhost:8081/solr" ConcurrentUpdateSolrServer solrServer= new ConcurrentUpdateSolrServer(url, 10000, 4); SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "shard1!513"); doc.addField("name", "Santhosh"); solrServer.add(documents); solrServer.commit();

Pero está guardando el documento en collection1 con id shard1! 513, ¿hay algún cambio de configuración requerido en solrconfig.xml (estoy usando el valor predeterminado de solrconfig.xml que vino con solr4.5)

¿Cómo guardar documentos en mi nueva colección ? y cómo hacer el enrutamiento de documentos?

Por favor, ayúdenme con el problema.

¡Gracias!


Puede usar CloudSolrServer y UpdateRequest

SolrServer solrServer = new CloudSolrServer(zkHost) // zkHost is your solr zookeeper host string SolrInputDocument doc = new SolrInputDocument(); UpdateRequest add = new UpdateRequest(); add.add(document); add.setParam("collection", "newCollection"); add.process(solrServer); UpdateRequest commit = new UpdateRequest(); commit.setAction(UpdateRequest.ACTION.COMMIT, true, true); commit.setParam("collection", "newCollection"); commit.process(solrServer);


Agregué el nombre Core de la nueva Colección a la URL. así que está funcionando bien ahora.

En lugar de:

String url="http://localhost:8081/solr"

Solía:

String url="http://localhost:8081/solr/newCollection_shard1_replica1" ConcurrentUpdateSolrServer solrServer= new ConcurrentUpdateSolrServer(url, 10000, 4); SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "shard1!513"); doc.addField("name", "Santhosh"); solrServer.add(documents); solrServer.commit();