搜索多个solr核心的最佳方法

时间:2017-05-01 10:21:19

标签: java solr distributed-computing solrj

我正在开发一个作为solr客户端的应用程序。我必须进行多核搜索,其中字段完全相同。我不知道实现它的最佳方法。我在java中使用solrj。 什么最好从solr使用分布式搜索或使用应用程序端的线程搜索每个单独的核心?

实施例

http://XXXX:8983/solr/core1
http://XXXX:8983/solr/core2
http://XXXX:8983/solr/core3
http://XXXX:8983/solr/core4

每个核心的字段都是相同的。

我希望使用生成的结果集有效地搜索所有颜色。

Solr UI

此刻我有26个核心,最大的核心 Num Docs:4677529 大小:56.7 GB

其他人也有类似的价值观。核心数量趋于增加。

由于

3 个答案:

答案 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");

这使您可以选择以下选项:

  1. 您的配置已经是SolrCloud环境,但对此一无所知。让我们检查你的Solr管理员(取自你的一个Solr实例),看看是否有" Cloud"左侧菜单中的菜单。见附图

    Solr Admin - Cloud Menu

  2. 在这种情况下,请查看Cloud菜单,这将显示群集的网络拓扑以及要在SolrJ实现中使用的集合的名称。见附图:

    Solr Cloud topology

    1. 如果"云"菜单丢失(图1)。您应该将现有核心从独立的Solr配置移动到SolrCloud。
    2. 要清楚,您无法将现有Solr实例从独立切换到SolrCloud。我建议的最简单的方法是创建一个新的SolrCloud集群并重新索引所有核心。我还建议你看一下Solr terminology in a SolrCloud configuration

      以下几行是创建SolrCloud的步骤:

      现在,您可以开始将文档移动(重新索引)到您创建的新品牌集合中。

      根据您重新编制索引的文档的大小和数量,您必须创建一些分片,以便在SolrCloud实例中拆分集合。

      我强烈建议您在游乐场练习,例如使用-cloud -e cloud参数启动最新版本的Solr(6.x)。这将在同一台服务器上启动更多的Solr实例和一个zookeeper独立,但请将其视为一个玩具,以了解它是如何工作的。

答案 2 :(得分:0)

如果你不想改变任何东西(即这些核心通常与其他核心分开居住和行为)并且它是一个小的,包含的任务(即你想要进一步扩展的东西)未来),您可以在Solr中use the explicit sharding support同时查询所有核心。这假定文档大致均匀地分布在核心上,因为分数是在本地计算的,然后在您要查询的节点中进行聚合。