solr - 如何使用 solrj 在特定分片中索引数据

标签 solr solrj solrcloud

我使用 solrj 作为客户端将文档索引到 solr 云中(使用 solr4.5)

我需要根据tenant_id保存文档,因此我正在尝试文档路由。仅当使用 numShards 参数 ( http://searchhub.org/2013/06/13/solr-cloud-document-routing/ ) 创建集合时才可能实现这一点

我在 solr 云中有两个 solr 实例(example1/solr 和 example2/solr)和在 2181 端口运行的 exrenal Zookeeper。

两个实例都包含名为collection1的集合

我使用以下命令创建了另一个名为 newCollection 的集合(具有两个分片和两个副本) http://localhost:8501/solr/admin/collectionsaction=CREATE&name=newCollection&numShards=2&replicationFactor=2&maxShardsPerNode=2&router.field=id

因此,在 example1/solr-> 中,我有 newCollection_shard1_replica1 和 newCollection_shard2_replica1,

在 example2/solr 中 -> 我有 newCollection_shard1_replica2 和 newCollection_shard2_replica2

我将 example1/solr/collection1/conf 复制到所有分片和副本

我重新启动了zookeeper服务器以及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

(两个实例运行在不同的端口,一个运行在 8081,另一个运行在 8051)


我正在使用 solrj 客户端来索引文档

这是我的示例代码

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();

但是它正在将文档保存在collection1中,id为shard1!513,solrconfig.xml中是否需要进行任何配置更改(我使用的是solr4.5附带的默认solrconfig.xml)

如何将文档保存在我的newCollection中?以及如何进行文档路由?

请帮我解决问题。

谢谢!

最佳答案

您可以使用CloudSolrServer和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);

关于solr - 如何使用 solrj 在特定分片中索引数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479081/

相关文章:

java - Solr - 在 Windows 7 64 位上使用 64 位 Java,而不是 32 位 Java

search - Solr 条件添加/更新?

elasticsearch - 在Solr 5.3.1中替换ApostropheFilterFactory

solr - 为什么我在使用 SolrJ 和 SolrCloud 时会得到 "KeeperErrorCode = NoNode for/clusterstate.json"?

tomcat - 在为常规搜索请求提供索引后,Solr 云崩溃

solr - Lucene - Solr 版本兼容性

java - SLF4J 记录到文件与 DB 与 Solr

java - 如何在 Solr 中获取最后的索引记录?

Solr : Server at http://localhost:8080//solr returned non ok status:500, 消息:内部服务器错误

java - 使用 Solrj 进行基本身份验证时,出现错误 "Caused by: java.net.SocketException: Connection reset"