如何使用SolrJ API创建一个不打乱createNodeSet主机的Solr集合?

u7up0aaq  于 2022-11-05  发布在  Solr
关注(0)|答案(2)|浏览(172)

我试图在SolrCloud上创建一个Solr集合,我想以一定的顺序传入我希望该集合存在的主机,并让Solr遵循该顺序。Solr在API中使用参数createNodeSet.shuffle公开了此功能,但我无法在SolrAdminRequest.Create示例中显式设置此参数。
Solrj中没有这个功能吗?我可以用setProperties()方法设置值吗?即使它是一个“param”?

4ktjp1zp

4ktjp1zp1#

我也面临着这个问题,我注意到你已经在GitHub上打开了一个PR。我尝试了几种方法来实现这个目标,但最后我给予了,在将它们传递给Create请求之前,我自己对节点进行了洗牌。
Kotlin中:

val nodes = listOf("node1", "node2")
val createNodeSet = nodes.shuffled().joinToString(",")

Java中:

List<String> nodes = Arrays.asList("node1", "node2");
Collections.shuffle(nodes);
String createNodeSet = String.join(",", nodes);
u2nhd7ah

u2nhd7ah2#

由于current Solr现在将构造函数标记为protected,只能通过静态构建器访问,而且我不想担心有一个新的类,所以我想出了以下方法来设置所需的参数。
这个方法应该可以在许多其他构建器创建的op对象上使用。

Create req = CollectionAdminRequest //
                            .createCollection(newCollection, newConfigSet, NUM_SHARDS, NUM_REPLICAS);
final SolrParams reqParams = req.getParams();
if (reqParams instanceof ModifiableSolrParams) {
    ((ModifiableSolrParams) reqParams).set("createNodeSet.shuffle", "false");
}

相关问题