實戰全局搜索框架Solr

solr啓動

下載地址:http://lucene.apache.org/solr

測試版本:solr-4.10.3    apache-tomcat-7.0.47(由於solr自帶服務器不穩定)

下載解壓後在文件 D:\Solr\solr-4.10.3\example\webapps中找到solr的war包

將其放入tomcat webapp目錄下

修改D:\Solr\apache-tomcat-7.0.47\webapps\solr\WEB-INF 下的web.xml中存放solr家的位置

將D:\Solr\solr-4.10.3\example\solr中collection文件複製到指定位置↑

再在Tomcat的webapps\solr\WEB-INF\lib中導入solr啓動所需依賴:

啓動Tomcat 測試是否成功http://localhost:8080/solr/

IK分析器

由於solr自帶的幾種中文分析器 不能滿足我們的中文分詞需求 現配置IKAnalyzer分析器 配置如下:

找到所配置配置solr核(collection1)的位置 在其config文件中schema.xml 添加內容:

在Tomcat的webapps\solr\WEB-INF中創建classes文件夾(相當於src資源文件),用於存放IKAnalyzer分析器的擴展配置

創建IkAnalyzer.cfg.xml文件 配置擴展字典的存放位置 

創建其餘兩個.dic文件存放所需數據 啓動Tomcat 打開網站查看是否成功

solr後臺管理界面數據的導入

在collection1文件夾中創建lib文件夾,用以存放所需jar包(2個solr自帶包 1個mysql驅動包)

在collection1\conf文件下 打開solrconfig.xml添加如下配置:

再在當前目錄創建data-config.xml文件 添加數據庫配置:

打開schema.xml 添加product配置

配置完成後打開solr後臺管理界面

SolrJ

solrJ是訪問Solr服務的JAVA客戶端,提供索引和搜索的請求方法,SolrJ通常嵌入在業務系統中,通過solrJ的API接口操作Solr服務。

準備工作:

將solr-4.10.3\dist\solrj-lib的所有jar包

solr-4.10.3\dist下solr-solrj-4.10.3.jar(solr核心包)

solr-4.10.3\example\lib\ext下的所有jar包

放入eclipse(創建一個Java工程 添加lib文件)

案例:添加 刪除 修改 查詢(高亮)

public class TestSolrJ {
	//添加&修改(id相同 就是修改 不同就是添加)
	@Test
	public void Testname()throws Exception{
		//創建Solr的客戶端鏈接對象
		String baseURL="http://localhost:8080/solr/";
		//單機版
		SolrServer solrServer = new HttpSolrServer(baseURL);
		//創建一個文檔對象
		SolrInputDocument doc = new SolrInputDocument();
		doc.setField("id", "111");    //域(要存在) 值
		doc.setField("name", "張叄");  
		//doc.addField("name", "用法一樣");
		
		//添加
		solrServer.add(doc);
		solrServer.commit();
	}
	
	//刪除
		@Test
		public void Deletename()throws Exception{
			//創建Solr的客戶端鏈接對象
			String baseURL="http://localhost:8080/solr/";
			SolrServer solrServer = new HttpSolrServer(baseURL);
			solrServer.deleteById("111");   		//刪除id爲111的
			solrServer.deleteByQuery("name:張叄"); 	//根據條件刪除
			
			solrServer.commit();
		
		}
		
	//查詢
		@Test
		public void Queryename()throws Exception{
			//創建Solr的客戶端鏈接對象
			String baseURL="http://localhost:8080/solr/";
			SolrServer solrServer = new HttpSolrServer(baseURL);
			
			//創建solr的查詢對象
	        SolrQuery sq=new SolrQuery();
	        //設置查詢條件
	        sq.set("q","name:李四" );
	     	//多條件查詢
//	        sq.set("q","name:李四 AND age:18  OR phone:110" );
	        //設置過濾條件
//	        sq.set("fq", "age:[1 TO 20]");
	        //設置排序
//	        sq.addSort("wages", ORDER.desc);
	        //設置分頁
//	        sq.setStart(0);		//開始位置
//	        sq.setRows(5);		//每頁3條
	        //開啓高亮
	        sq.setHighlight(true);
	        sq.addHighlightField("item_title");//設置高亮域
	        sq.setHighlightSimplePre("<div style='color:red'>");//前綴
	        sq.setHighlightSimplePost("</div>");//後綴
	        
	        //查詢
	        QueryResponse qr=solrServer.query(sq);
	        //獲取查詢結果
	        SolrDocumentList sds=qr.getResults();
	        //獲取查詢的記錄數
	        long index=sds.getNumFound();
	        System.out.println("數量:"+index);
	        for(SolrDocument sd:sds){//默認取出10條記錄
	            String id=(String) sd.getFieldValue("id");
	            String name=(String) sd.getFieldValue("name");
	            System.out.println("我是華麗麗的分割線====================================");
	            System.out.println("id:"+id);
	            System.out.println("name:"+name);
	            
	            
	            //獲取高亮顯示的結構
	            Map<String, Map<String, List<String>>> highlighting=qr.getHighlighting();
	            if(highlighting!=null){
	                //根據Id獲得每個域的高亮內容
	                Map<String, List<String>> map=highlighting.get(id);
	                //根據具體的域獲取高亮內容
	                List<String> list=map.get("name");
	                if(list!=null && !list.isEmpty()){
	                    for(String str:list){
	                        System.out.println("高亮內容:"+str);
	                    }  
	                }
	            }
	         }
	        
		}
}

 

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