1. 程式人生 > >Solr學習筆記(四)----使用solrJ操作

Solr學習筆記(四)----使用solrJ操作

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"));
	}
}