跨多个Solr实例的分布式搜索

时间:2011-05-25 12:44:59

标签: performance search solr full-text-search

我有1000亿行数据,我已将其拆分为多个solr实例,每个实例都有一个单独的架构。

我需要:

  • 查询每个实例。
  • 从每个实例中获取结果。
  • 将这些结果附加到最终查询中。
  • 调用最终的Solr实例以获得最终结果。

我该怎么做?我是否需要编写单独的requestHandler?

例如

$ curl http://localhost:8983/solr/select?q=query1.result AND ... AND queryN.result

4 个答案:

答案 0 :(得分:1)

您正在寻找的是分布式搜索 - > http://wiki.apache.org/solr/DistributedSearch

答案 1 :(得分:0)

我是通过solrj(例如解决方案)

完成的
 File home = new File("C:\\workspace\\SolrMultipleCore\\solr");
 File f = new File( home, "solr.xml" );
 CoreContainer container = new CoreContainer();
 container.load( "C:\\workspace\\SolrMultipleCore\\solr", f );
 EmbeddedSolrServer server = new EmbeddedSolrServer( container,"core1");
 EmbeddedSolrServer server1 = new EmbeddedSolrServer( container,"core2");
 String query=params.getParams("q");
 String query1=params.getParams("q1");
 SolrQuery solrquery=new SolrQuery(query);
 QueryResponse q = server.query(solrquery);
 QueryResponse q1 = server1.query(solrquery);

Solr.xml

<solr persistent="true">
 <property name="snapshooter" value="C:\solr1\bin\snapshooter.sh" />
 <cores adminPath="/admin/cores">
  <core name="core1" instanceDir="core0"/>   
  <core name="core2" instanceDir="core1" />
 </cores>
</solr>

我仍在研究如何在solr中做到这一点。

如果有任何细节需要,请告诉我

答案 2 :(得分:0)

我认为DirectSolrConnection可以提供帮助。我和你的要求类似,我确实使用了DirectSolrConnection。

答案 3 :(得分:0)

您可以结合使用分片过滤查询

然后

示例:

你的本地'组合solr'在localhost:8983上运行,其他solrs在host1:8983上运行,host2:8983,... 您正在这些对等体上远程搜索“field1:query1”,但您想要从结果中过滤出“field2:query2”。所以你打电话:

http://localhost:8983/solr/select?shards=host1:8983/solr,host1:8983/solr&q=field1:query1&fq=field2:query2