我有1000億行數據,我已經分成多個solr實例,每個實例都有一個單獨的模式。跨多個Solr實例的分佈式搜索
我需要:
- 查詢每個實例。
- 從每個實例獲取結果。
- 將這些結果附加到最終查詢。
- 調用最終的Solr實例以獲得最終結果。
我該怎麼做?我是否需要編寫一個單獨的requestHandler?
例如,
$ curl http://localhost:8983/solr/select?q=query1.result AND ... AND queryN.result
我有1000億行數據,我已經分成多個solr實例,每個實例都有一個單獨的模式。跨多個Solr實例的分佈式搜索
我需要:
我該怎麼做?我是否需要編寫一個單獨的requestHandler?
例如,
$ curl http://localhost:8983/solr/select?q=query1.result AND ... AND queryN.result
你正在尋找被稱爲分佈式搜索什麼 - >http://wiki.apache.org/solr/DistributedSearch
啊,好的..抱歉..誤解了你的問題。在這種情況下 - 我認爲 - 您必須合併應用程序中的「子」結果才能生成新的最終查詢。 – 2011-05-25 14:51:35
我不能幫你嗎? – 2011-05-25 14:58:20
如何在solr本身內部做這件事? – 2011-05-25 15:00:10
我不得不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中做到這一點。
讓我知道是否有任何具體細節需要在這個
我覺得DirectSolrConnection能幫上忙。我有類似的需求,我也使用DirectSolrConnection。
如何使用DirectSolrConnection進行分佈式搜索。你需要和你一起使用SolrCore實例。 – 2014-05-15 06:36:48
您可以使用碎片和過濾器組合查詢:
然後
示例中的結果:
當地的 '組合的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
可以在ElasticSearch.But做到這一點不知道Solr的。 http://www.elasticsearch.org/guide/reference/api/multi-search.html – sathis 2012-04-06 06:52:28