(2)Solr:Java後臺獲取Solr查詢信息

這裏介紹兩種方法:1.Solrj,2.httpClient httpGet
1.Solrj
首先需要下載Solrj相關的jar包,其實在Solr的下載包中就已經包含了Solrj jar包和依賴的jar包,具體位置:
依賴:Solr解壓文件\dist\solrj-lib
Solrj:Solr解壓文件\dist solr-solrj-5.5.5.jar

將相關jar包放入項目中
連接Solr服務器的方式(這裏使用在本地搭建的Solr服務器來做示例,本地Solr服務器搭建方法http://blog.csdn.net/yeyinglingfeng/article/details/79126161

        HttpSolrClient server = new HttpSolrClient("http://10.12.30.85:8080/solr/core1");
        server.setConnectionTimeout(300000);//連接超時時間5分鐘
        server.setParser(new XMLResponseParser()); // binary parser is used by default
        server.setSoTimeout(1000); // socket read timeout
        server.setDefaultMaxConnectionsPerHost(100);
        server.setMaxTotalConnections(100);
        server.setFollowRedirects(false); // defaults to false
        server.setAllowCompression(true);

        SolrQuery query=new SolrQuery();
        query.setQuery("id:151");
        query.addFilterQuery("itemName:yby");
        query.addField("itemName,ownerNo");

        QueryResponse responseInfo = server.query(query);
        List<trainingItem> trainingItem=responseInfo.getBeans(trainingItem.class);
        for(trainingItem item:trainingItem){
            System.out.println(item.getId()+":"+item.getItemNo()+":"+item.getItemName()+":"+item.getOwnerNo());
        }

query.setQuery("id:151");代表Solr控制界面Query中的p字段
query.addFilterQuery("itemName:yby");代表fq字段
query.addField("itemName,ownerNo");代表fl字段

QueryResponse responseInfo = server.query(query);拼接/發送信息,並獲取Solr服務器返回的數據。
trainingItem是一個javaBean,用來存儲拿出的數據信息,參數對應查詢出的信息的對應列。

2.httpClient
從第1種獲取數據的方式中我們可以看到是通過HttpSolrClient這個類來實現的,是不是有種熟悉的感覺,httpClient,想不到你個濃眉大眼的也混了進來,由此推測是否也可以通過httpClient的httpGet,httpPost方式獲取數據呢?
再來回顧下Solr簡介:用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。這是上一篇文章中提到過的,所以,我們應該可以通過httpGet的方式來獲取數據(說白了就是網頁爬取方式了)。
再來看下Solr服務器 Query界面,當輸入完產尋條件後點擊查詢,我們可以看到右邊界面的最上方有一個網址:
這裏寫圖片描述
把網址輸入瀏覽器,可以看到瀏覽器返回了json格式的查詢結果:
這裏寫圖片描述
所以,在簡單的查詢條件下,是可以直接用上面這種方式訪問數據的,只是需要我們自己來拼接下網址罷了。
httpClient,httpGet方式爬取頁面:
這裏需要fastjson-1.1.24.jar來轉換json數據。
因爲從上圖中可知,我們所需的數據都存放在response,docs中,所以,使用httpGet獲取到json數據後,可以一步步的去拿取到所需信息。

        CloseableHttpClient httpClient = HttpClients.createDefault(); 
        //查詢網址,實際使用時需要拼接入查詢條件
        HttpGet httpGet = new HttpGet("http://10.12.30.85:8080/solr/core1/select?indent=on&q=*:*&wt=json");

        HttpResponse response;  
        String line; 
        response = httpClient.execute(httpGet);

        HttpEntity httpEntity = response.getEntity();  
        BufferedReader bufferedReader = null;  
        bufferedReader = new BufferedReader(new InputStreamReader(  
                httpEntity.getContent(), "utf-8"), 8 * 1024);  
        String entityStringBuilder = "";  
        while ((line = bufferedReader.readLine()) != null) {  
            entityStringBuilder+=line + "\n";  
        }  
        JSONObject obj = JSONObject.parseObject(entityStringBuilder);
        obj=obj.getJSONObject("response");
        JSONArray param = obj.getJSONArray("docs");
        List<trainingItem> list = new ArrayList<trainingItem>();
        list=JSONObject.parseArray(param.toString(),trainingItem.class);
        for(int i=0;i<list.size();i++){
            System.out.println(list.get(i).getId()+":"+list.get(i).getItemName());
        }

其實對比下2種方式,Solrj中的HttpSolrClient,QueryResponse,可以看出Solrj的實現原理應該也是httpClient,推薦使用第一種方式,畢竟連接更加穩定。
這時順便看下Solrj依賴的jar包:
這裏寫圖片描述
emmmm…
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章