1. 程式人生 > >(2)Solr:Java後臺獲取Solr查詢資訊

(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

        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…
這裡寫圖片描述

相關推薦

2SolrJava後臺獲取Solr查詢資訊

這裡介紹兩種方法:1.Solrj,2.httpClient httpGet 1.Solrj 首先需要下載Solrj相關的jar包,其實在Solr的下載包中就已經包含了Solrj jar包和依賴的jar包,具體位置: 依賴:Solr解壓檔案\dist\sol

「深入Java虛擬機2Class類文件結構

1.5 trac 三種 type 類構造 face 方法 class throw Java是與平臺無關的語言,這得益於Java源代碼編譯後生成的存儲字節碼的文件,即Class文件,以及Java虛擬機的實現。不僅使用Java編譯器可以把Java代碼編譯成存儲字節碼的Class

大前端之路node第2Express Generator搭建node專案後臺

使用 Express Generator Express Application Generator 能夠快速建立一個Express應用框架。 npm install express-generator -g express myapp --view=pug cd myapp npm i

java反射機制2- 實踐反射機制+動態代理實現模擬RMI遠端方法呼叫

1 涉及主要知識點   1、RMI(Remote Method Invocation):遠端方法呼叫是一種計算機之間利用遠端物件互相呼叫實現雙方通訊的一種通訊機制。使用這種機制,某一臺計算機上

微信小程序java後臺獲取openId

+= rspec post main 接口 common https output rgs 一、功能描述 openId是某個微信賬戶對應某個小程序或者公眾號的唯一標識,但openId必須經過後臺解密才能獲取(之前實現過前臺解密,可是由於微信小程序的種種限制,前臺解密無法在小

貝葉斯網2Netica從數據中學習CPT

指向 搭建 上一個 劃分 認知 圖劃分 4.0 ont 再次 1. 離散節點 在官方Tutorial中是有詳細的案例的,就是B篇3.3節,你可以動手把天氣預報這個實現一下: http://www.norsys.com/tutorials/netica/secB/tut_B3

【深入Java虛擬機1Java內存區域與內存溢出

count 遇到 leak 分析 對象類型 深度 分配內存 解釋執行 尋址 內存區域 Java虛擬機在執行Java程序的過程中會把他所管理的內存劃分為若幹個不同的數據區域。Java虛擬機規範將JVM所管理的內存分為以下幾個運行時數據區:程序計數器、Java虛擬機棧、本地方法

「深入Java虛擬機6Java語法糖

拆裝箱 重載 jdk1 支持 名稱 不存在 語法糖 pub 簽名 語法糖(Syntactic Sugar),也稱糖衣語法,是由英國計算機學家Peter.J.Landin發明的一個術語,指在計算機語言中添加的某種語法,這種語法對語言的功能並沒有影響,但是更方便程序員使用。Ja

「深入Java虛擬機器6Java語法糖

語法糖(Syntactic Sugar),也稱糖衣語法,是由英國計算機學家Peter.J.Landin發明的一個術語,指在計算機語言中新增的某種語法,這種語法對語言的功能並沒有影響,但是更方便程式設計師使用。Java中最常用的語法糖主要有泛型、變長引數、條件編譯、自動拆裝箱、內部類等。虛擬機器並不支援這些語法

第五章2 分類最近鄰分類器

積極學習方法:從訓練記錄中提取模型,對預測資料進行分類 消極學習方法:Rote分類器,記住整個訓練資料,僅當測試例項的屬性和某個訓練樣例完全匹配時才進行分類,缺點是某些測試記錄不能被分類 更靈活的方法是找出和測試樣例的屬性相對接近的所有訓練樣例,這些訓練樣例即最近鄰 最近鄰分類器是把每個樣例看作多維空間

第四章2 分類模型評估

訓練誤差:即再代入誤差或表現誤差,即訓練記錄上錯誤分類的比例 泛化誤差:模型在未知記錄上的期望誤差 一個好的分類模型應該具有低訓練和泛化誤差,而擬合度過高的模型,泛化誤差可能高 模型的訓練誤差隨著模型的複雜度增加而降低,但是檢驗誤差可能很大(檢驗誤差在一定程度上代表著泛化誤差),因為樹的結點可能擬

Tomcat學習總結2——Tomcat部署Java War包應用教程

一、打包JavaWeb應用  在Java中,使用"jar"命令來對將JavaWeb應用打包成一個War包,jar命令的用法如下:範例:將JavaWebDemoProject這個JavaWeb應用打包成w

2Hadoop核心 -- java程式碼對MapReduce的例子1

案例一:wordcount字數統計功能 1.1 先準備兩個txt檔案,並上傳到hdfs上 test1.txt hello zhangsan lisi nihao hai zhangsan nihao lisi x xiaoming test2.txt zha

2Hadoop核心-java程式碼對MapReduce的操作

上一篇檔案介紹了java程式碼怎麼操作hdfs檔案的,hdfs理念“就是一切皆檔案”,我們現在搞定了怎麼使用java上傳下載等操作了接下來就要處理檔案了,hadoop的mapreduce模組。 一、Hadoop Map/Reduce框架        

Koa與Node.js開發實戰2——使用Koa中介軟體獲取響應時間視訊演示

學習架構:     在實戰專案中,經常需要記錄下伺服器的響應時間,也就是從伺服器接收到HTTP請求,到最終返回給客戶端之間所耗時長。在Koa應用中,利用中介軟體機制可以很方便的實現這一功能。程式碼如下所示: 01 const koa = require('koa');

spring cloud 學習2核心 Eureka 提供服務註冊和發現 註冊中心,負載均衡,故障轉移

官方描述:雲端服務發現,一個基於 REST 的服務,用於定位服務,以實現雲端中間層服務發現和故障轉移 Eureka 一個服務中心,一個註冊中心,將可以提供的服務都註冊到這個元件中, ,其他呼叫者需要的時候去註冊中心去獲取,然後再呼叫,避免了服務間的直接呼叫,實現了服務間的解耦

成為JavaGC專家2—如何監控Java垃圾回收機制

本文是成為Java GC專家系列文章的第二篇。在第一篇《深入淺出Java垃圾回收機制》中我們學習了不同GC演算法的執行過程,GC是如何工作的,什麼是新生代和老年代,你應該瞭解的JDK7中的5種GC型別,以及這5種類型對於應用效能的影響。在本文中,我將解釋JVM到底是如何執行垃

【深入Java虛擬機器1Java記憶體區域與記憶體溢位

記憶體區域 Java虛擬機器在執行Java程式的過程中會把他所管理的記憶體劃分為若干個不同的資料區域。Java虛擬機器規範將JVM所管理的記憶體分為以下幾個執行時資料區:程式計數器、Java虛擬機器棧、本地方法棧、Java堆、方法區。下面詳細闡述各資料區所儲存的

面試話癆CJAVA String,別以為你穿個馬甲我就不認識你了

  面試話癆系列是從技術廣度的角度去回答面試官提的問題,適合萌新觀看!    面試官,別再問我火箭怎麼造了,我知道螺絲的四種擰法,你想聽嗎?   String相關的題目,是面試中經常考察的點,當面試中遇到了String相關的問題,我們可以這麼聊: 一:String底層結構   從底層結構上來說,

練手小項目2-生活小助手--星座運勢查詢

avi 聚合數據 當前 value book tell 身邊 req pin 上一篇內容 練手小項目(2)-生活小助手 今天星期一。趁著中午的歇息時間把 第二個寫出來 星座運勢,近期看看極客學院 用聚合數據做了天氣預報的視頻教程,不好評價他。看他在後面的代碼變更那