基於solr或者elasticsearch提供的多核,多索引,多shard等查詢能力,一般都是由lucene提供的多索引查詢的功能演化而來的,這個功能在單機版的lucene里面確實沒有發揮多大的威力,但是確是solrclourd,elasticsearch分布式集群查詢數據的基礎,正是因為lucene提供了多索引歸並查詢已經合並排序功能,所以在給它加上http的能力,就能把lucene也做成一個分布式的查詢框架,當然一個分布式搜索引擎,需要考慮的內容非常多,容錯,副本,高可靠,等都是主要功能。
倫理片 http://www.dotdy.com/
本篇介紹洗下如何在solr中實現多core查詢,其實也叫多shard查詢,多core查詢的要求是,兩份索引里面的主鍵字段,和查詢數據字段必須一致,就是說都必須有一樣的字段名,否則查詢的時候或者歸並merge的時候會報錯,其實這正是分布式搜索的基礎條件,只不過現在我們不用solrcloud也能查詢多個core,需要注意前提條件:
主鍵字段+查詢字段的名稱必須一致,下面看solrj里面如何實現:
- /***
- * 多核查詢測試
- * @throws Exception
- */
- public static void queryMultiCore()throws Exception{
- //查詢a和b下面的數據,
- HttpSolrClient sc=new HttpSolrClient("http://192.168.1.215:8983/solr/a");
- String shards = "192.168.1.215:8983/solr/a,192.168.1.214:8983/solr/b";
- ModifiableSolrParams solrParams = new ModifiableSolrParams();
- solrParams.set("q", "sname:北京奇虎科技有限公司");
- // solrParams.set("q.op", "AND");//設置查詢關系
- solrParams.set("fl", "*,score");//設置過濾
- solrParams.set("shards", shards);//設置shard
- QueryResponse rsp = sc.query(solrParams);
- System.out.println("命中數量:"+rsp.getResults().getNumFound());
- for(SolrDocument sd:rsp.getResults()){
- System.out.println(sd);
- }
- sc.close();
- }