2011-05-25 86 views
0

我有1000億行數據,我已經分成多個solr實例,每個實例都有一個單獨的模式。跨多個Solr實例的分佈式搜索

我需要:

  • 查詢每個實例。
  • 從每個實例獲取結果。
  • 將這些結果附加到最終查詢。
  • 調用最終的Solr實例以獲得最終結果。

我該怎麼做?我是否需要編寫一個單獨的requestHandler?

例如,

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

可以在ElasticSearch.But做到這一點不知道Solr的。 http://www.elasticsearch.org/guide/reference/api/multi-search.html – sathis 2012-04-06 06:52:28

回答

1

你正在尋找被稱爲分佈式搜索什麼 - >http://wiki.apache.org/solr/DistributedSearch

+0

啊,好的..抱歉..誤解了你的問題。在這種情況下 - 我認爲 - 您必須合併應用程序中的「子」結果才能生成新的最終查詢。 – 2011-05-25 14:51:35

+0

我不能幫你嗎? – 2011-05-25 14:58:20

+0

如何在solr本身內部做這件事? – 2011-05-25 15:00:10

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中做到這一點。

讓我知道是否有任何具體細節需要在這個

0

我覺得DirectSolrConnection能幫上忙。我有類似的需求,我也使用DirectSolrConnection。

+0

如何使用DirectSolrConnection進行分佈式搜索。你需要和你一起使用SolrCore實例。 – 2014-05-15 06:36:48

0

您可以使用碎片過濾器組合查詢

然後

示例中的結果:

當地的 '組合的Solr' 是在本地主機上運行:8983和其他solrs正在host1上運行:8983,主機2:8983 ,... 您正在遠程搜索這些對等字段'field1:query1',但您希望過濾結果中的查詢'field2:query2'。所以你撥打:

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