我正在开发一个作为solr客户端的应用程序。我必须进行多核搜索,其中字段完全相同。我不知道实现它的最佳方法。我在java中使用solrj。 什么最好从solr使用分布式搜索或使用应用程序端的线程搜索每个单独的核心?
实施例
http://XXXX:8983/solr/core1
http://XXXX:8983/solr/core2
http://XXXX:8983/solr/core3
http://XXXX:8983/solr/core4
每个核心的字段都是相同的。
我希望使用生成的结果集有效地搜索所有颜色。
此刻我有26个核心,最大的核心 Num Docs:4677529 大小:56.7 GB
其他人也有类似的价值观。核心数量趋于增加。
由于
答案 0 :(得分:0)
如果所有内核具有相同的配置,并且您担心效率等问题,那么在Solrcloud下进行此设置会更有意义。
答案 1 :(得分:0)
据我在问题和评论中理解,您的场景非常适合SolrCloud,SolrCloud是在Solr中启用一组新的分布式功能的配置的名称。
集合是一个完整的逻辑索引,可以在更多Solr实例中进行物理分布。
当你必须向你的收藏集提交一个查询时,你所要做的就是像之前对你的核心一样参考这个集合。 SolrJ客户端应该以不同的方式构建,您必须指定zookeeper连接字符串,使用CloudSolrClient
并指定默认集合。
String zkHostString = "zkServerA:2181,zkServerB:2181,zkServerC:2181/solr";
CloudSolrClient solr = new CloudSolrClient.Builder().withZkHost(zkHostString).build();
solr.setDefaultCollection("collectionName");
这使您可以选择以下选项:
您的配置已经是SolrCloud环境,但对此一无所知。让我们检查你的Solr管理员(取自你的一个Solr实例),看看是否有" Cloud"左侧菜单中的菜单。见附图
在这种情况下,请查看Cloud菜单,这将显示群集的网络拓扑以及要在SolrJ实现中使用的集合的名称。见附图:
要清楚,您无法将现有Solr实例从独立切换到SolrCloud。我建议的最简单的方法是创建一个新的SolrCloud集群并重新索引所有核心。我还建议你看一下Solr terminology in a SolrCloud configuration。
以下几行是创建SolrCloud的步骤:
-z zk-node1:2181,zk-node2:2181,zk-node3:2181
)现在,您可以开始将文档移动(重新索引)到您创建的新品牌集合中。
根据您重新编制索引的文档的大小和数量,您必须创建一些分片,以便在SolrCloud实例中拆分集合。
我强烈建议您在游乐场练习,例如使用-cloud -e cloud
参数启动最新版本的Solr(6.x)。这将在同一台服务器上启动更多的Solr实例和一个zookeeper独立,但请将其视为一个玩具,以了解它是如何工作的。
答案 2 :(得分:0)
如果你不想改变任何东西(即这些核心通常与其他核心分开居住和行为)并且它是一个小的,包含的任务(即你想要进一步扩展的东西)未来),您可以在Solr中use the explicit sharding support同时查询所有核心。这假定文档大致均匀地分布在核心上,因为分数是在本地计算的,然后在您要查询的节点中进行聚合。