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