Solr學習筆記(四)----使用solrJ操作
阿新 • • 發佈:2018-11-09
solrJ是solr官方類庫,實現原理就是使用http請求和響應,只是進行了一層封裝,不需要寫請求的url等引數。
使用solrJ操作solr索引庫的一些方法:
1、向solr索引庫新增文件
@Test public void testAddDocument() throws Exception{ //1.建立一個SolrServer物件,這是一個抽象類,通過它的子類建立物件,需要傳遞引數:solr服務的地址 //地址如果是http://192.168.25.131:8081/solr,那麼預設連線的是collection1 SolrServer solrServer = new HttpSolrServer("http://192.168.25.131:8081/solr/collection1"); //2.建立一個文件物件SolrInputDocument SolrInputDocument document = new SolrInputDocument(); //3.像文件中新增域,而且必須要新增一個id域,並且所有的域名要在solr服務的schema.xml中定義過 //id,item_title,item_price就是域名,需要在schema.xml中定義 document.addField("id", "doc01"); document.addField("item_title", "測試商品"); document.addField("item_price", 1000); //4.把文件寫如solr索引庫 solrServer.add(document); //5.提交文件 solrServer.commit(); }
2、從solr索引庫中通過id域刪除文件
@Test public void deleteDocument() throws Exception{ //1.建立一個SolrServer物件,這是一個抽象類,通過它的子類建立物件,需要傳遞引數:solr服務的地址 //地址如果是http://192.168.25.131:8081/solr,那麼預設連線的是collection1 SolrServer solrServer = new HttpSolrServer("http://192.168.25.131:8081/solr/collection1"); //根據文件id刪除 -- a solrServer.deleteById("doc01"); //根據查詢來刪除 -- b a和b方式都能刪除文件 //solrServer.deleteByQuery("id:doc01"); //提交 solrServer.commit(); }
3、從solr庫中刪除資料–簡單查詢
@Test public void queryList() throws Exception{ //1.建立一個SolrServer物件,這是一個抽象類,通過它的子類建立物件,需要傳遞引數:solr服務的地址 //地址如果是http://192.168.25.131:8081/solr,那麼預設連線的是collection1 SolrServer solrServer = new HttpSolrServer("http://192.168.25.131:8081/solr/collection1"); //2.建立一個SolrQuery物件 SolrQuery solrQuery = new SolrQuery(); //3.設定查詢條件 //solrQuery.setQuery("*:*"); //查詢全部 solrQuery.set("q", "*:*"); //查詢全部 solrQuery.setStart(0); //設定從第幾條開始查,不設定的話,預設是0 solrQuery.setRows(10); //設定查詢幾條資料,不設定的話,預設是10 //4.執行查詢,返回QueryResponse物件 QueryResponse queryResponse = solrServer.query(solrQuery); //5.從QueryResponse物件中獲取文件列表,也能獲取查詢的總記錄數 SolrDocumentList documentList = queryResponse.getResults(); System.out.println("總記錄數: "+ documentList.getNumFound()); //6.遍歷文件列表,取出域的內容 for (SolrDocument solrDocument : documentList) { System.out.println(solrDocument.get("id")); System.out.println(solrDocument.get("item_title")); System.out.println(solrDocument.get("item_sell_point")); System.out.println(solrDocument.get("item_price")); System.out.println(solrDocument.get("item_image")); System.out.println(solrDocument.get("item_category_name")); } }
4、從solr索引庫中查詢資料–複雜查詢
@Test
public void queryListFuza() throws Exception{
//1.建立一個SolrServer物件,這是一個抽象類,通過它的子類建立物件,需要傳遞引數:solr服務的地址
//地址如果是http://192.168.25.131:8081/solr,那麼預設連線的是collection1
SolrServer solrServer = new HttpSolrServer("http://192.168.25.131:8081/solr/collection1");
//2.建立一個SolrQuery物件
SolrQuery solrQuery = new SolrQuery();
//3.設定查詢條件
solrQuery.setQuery("手機"); //設定查詢關鍵字
solrQuery.setStart(0); //設定從第幾條開始查,不設定的話,預設是0
solrQuery.setRows(20); //設定查詢幾條資料,不設定的話,預設是10
solrQuery.set("df", "item_title"); //設定預設的搜尋域,如果不設定的話,預設是在text域裡面
solrQuery.setHighlight(true); //設定高亮顯示,表示在頁面上的樣式特別突出,比如說搜尋蘋果手機,在頁面上蘋果手機這個四個字就變顏色
solrQuery.addHighlightField("item_title"); //設定高亮顯示的域
solrQuery.setHighlightSimplePre("<em>");
solrQuery.setHighlightSimplePost("</em>"); //高亮顯示的字首和字尾,就是改變樣式
//4.執行查詢,返回QueryResponse物件
QueryResponse queryResponse = solrServer.query(solrQuery);
//5.從QueryResponse物件中獲取文件列表,也能獲取查詢的總記錄數
SolrDocumentList documentList = queryResponse.getResults();
System.out.println("總記錄數: "+ documentList.getNumFound());
//取高亮顯示的內容
Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting();
//6.遍歷文件列表,取出域的內容
for (SolrDocument solrDocument : documentList) {
System.out.println(solrDocument.get("id"));
//取高亮顯示的結果
String title = "";
List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
if(list != null && list.size() > 0){
title = list.get(0);
}else{
title = (String) solrDocument.get("item_title");
}
System.out.println("高亮顯示: " + title);
System.out.println(solrDocument.get("item_sell_point"));
System.out.println(solrDocument.get("item_price"));
System.out.println(solrDocument.get("item_image"));
System.out.println(solrDocument.get("item_category_name"));
}
}