package com.shi.solrj; import java.util.List; import java.util.Map; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.SolrInputDocument; import org.junit.Test; /** * * @author: SHF * @date: 2018年3月8日 下午1:47:48 * @Description:solrj 的使用 * 增刪改查 */ public class SolrJTest { //添加 @Test public void testAdd()throws Exception{ String baseURL="http://localhost:8080/solr"; //單機版 SolrServer solrServer=new HttpSolrServer(baseURL); SolrInputDocument doc=new SolrInputDocument(); doc.setField("id", "haha"); doc.setField("name_s", "小小小施爺"); //添加 solrServer.add(doc); //修改與添加一致 只要id一致就執行修改,不一致就是添加 solrServer.commit(); } //刪除 @Test public void testDelete()throws Exception{ String baseURL="http://localhost:8080/solr"; //單機版 SolrServer solrServer=new HttpSolrServer(baseURL); solrServer.deleteByQuery("*:*", 1000);//刪除全部 solrServer.commit(); } //查詢 @Test public void testSearch()throws Exception{ String baseURL="http://localhost:8080/solr"; //單機版 SolrServer solrServer=new HttpSolrServer(baseURL); //查詢關鍵詞 SolrQuery solrQuery=new SolrQuery(); // solrQuery.set("q", "*:*"); solrQuery.setQuery("title:2"); //高亮顯示 solrQuery.setHighlight(true);//打開開關 solrQuery.addHighlightField("title");//指定高亮域 solrQuery.setHighlightSimplePre("<span style='color:red'>");//設置前綴 solrQuery.setHighlightSimplePost("</span>");//設置後綴 //查詢結果 QueryResponse response = solrServer.query(solrQuery); //文檔結果接 SolrDocumentList solrDocumentList = response.getResults(); //總條數 System.out.println("總條數是:"+solrDocumentList.getNumFound()); /* * Map k id v map * map k 域名 v List * List list.get(0) */ Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); System.out.println("類容是:"); for (SolrDocument doc:solrDocumentList) { System.out.println(doc.get("id")); System.out.println(doc.get("title")); Map<String,List<String>> map=highlighting.get(doc.get("id")); List<String> list = map.get("title"); System.out.println(list.get(0)); } solrServer.commit(); } }
一個複雜一點的例子java
//複雜查詢 @Test public void querySolrJFuza()throws Exception{ //1 建立一個solrServer對象 SolrServer solrServer=new HttpSolrServer("http://192.168.36.40:8080/solr"); //2 建立一個solrquery對象 SolrQuery query=new SolrQuery(); //3 設置查詢條件 query.set("q", "手機");//設置查詢條件 query.setStart(0);//開始條數 query.setRows(20);//設置行數 query.set("df", "item_title");//設置默認查詢域 query.setHighlight(true);//開啓高亮顯示 query.addHighlightField("item_title");//設置高亮顯示域 query.setHighlightSimplePre("<span style='color:red'>");//高亮前綴 query.setHighlightSimplePost("</span>");//高亮顯示後綴 //4 執行查詢條件,執行查詢 得到QueryResponse對象 QueryResponse response = solrServer.query(query); //獲取高亮顯示的值 Map<String, Map<String, List<String>>> highlighting = response.getHighlighting(); //5 獲取文檔結果總記錄數 SolrDocumentList results = response.getResults(); System.err.println("查詢的總記錄數是:"+results.getNumFound()); //6 遍歷文檔列表,取出域的範圍 for(SolrDocument solrDocument:results){ System.out.println(solrDocument.get("id")); String title; //打印高亮顯示的值 Map<String, List<String>> map = highlighting.get(solrDocument.get("id")); List<String> list = map.get("item_title"); if(list!=null && list.size()>0){ title=list.get(0); }else{ title=(String) solrDocument.get("item_title"); } System.out.println(title); } }