Solrj是Solr搜索服务器的一个比较基础的客户端工具,可以非常方便地与Solr搜索服务器进行交互,最基本的功能就是管理Solr索引,包括添加、更新、删除和查询等。
使用代码
public class solrJTest { // solr url public static final String solrURL = "http://localhost:8080/solr"; // solr core名称 public static final String coreName = "coretest"; @Test public void main() { // queryById("1"); // query("*:*", "", 1, 3); // add(); // update(); // delete(); } /** * 方法描述: [测试通过id查询solr数据]</br> * 初始作者: xiangzhenhai<br/> * 创建日期: 2017年2月15日-上午11:07:24<br/> * 开始版本: 1.0.0<br/> */ public void queryById(String id) { try { SolrClient client = new HttpSolrClient(solrURL); SolrDocument solrDocument = client.getById(coreName, id); System.out.println(JSONObject.toJSON(solrDocument)); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 方法描述: [测试设置搜索条件,查询数据]</br> * 初始作者: xiangzhenhai<br/> * 创建日期: 2017年2月15日-上午11:36:19<br/> * 开始版本: 1.0.0<br/> */ public void query(String query, String fq, Integer start, Integer rows) { SolrQuery solrQuery = new SolrQuery(); // 设置搜索内容 solrQuery.setQuery(query); // 设置过虑条件 solrQuery.addFilterQuery(fq); // 设置起始位置和搜索结果数量 solrQuery.setRows(rows); solrQuery.setStart(start); // 设置搜索结果排序 solrQuery.addSort("sort", SolrQuery.ORDER.desc); // 搜索数据 try { SolrClient client = new HttpSolrClient(solrURL); QueryResponse response = client.query(coreName, solrQuery); SolrDocumentList docs = response.getResults(); System.out.println("文档个数:" + docs.getNumFound()); System.out.println("查询时间:" + response.getQTime()); for (SolrDocument doc : docs) { System.out.println("id: " + doc.getFieldValue("id") + " content: " + doc.getFieldValue("context")); } // 通过bean获取搜索结果(需要创建实体类) // List<SolrtestBean> list = response.getBeans(SolrtestBean.class); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 方法描述: [测试写入数据到solr]</br> * 初始作者: xiangzhenhai<br/> * 创建日期: 2017年2月15日-上午11:43:03<br/> * 开始版本: 1.0.0<br/> */ public void add() { SolrClient client = new HttpSolrClient(solrURL + "/" + coreName); // 单条数据写入 SolrInputDocument doc = new SolrInputDocument(); doc.addField("id", "1"); doc.addField("context", "单条数据写入"); doc.addField("updateTime", new Date()); doc.addField("sort", 1); // 单条数据通过实体类写入 // SolrtestBean bean = new SolrtestBean(); // bean.setContext("333333333"); // bean.setId("8"); try { UpdateResponse rspDoc = client.add(doc); // UpdateResponse rsp = client.addBean(bean); System.out.println("UpdateResponse result:" + rspDoc.getStatus() + " Qtime:" + rspDoc.getQTime()); UpdateResponse rspcommit = client.commit(); System.out.println( "commit doc to index" + " result:" + rspcommit.getStatus() + " Qtime:" + rspcommit.getQTime()); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } // 多条数据写入 List<SolrInputDocument> docList = new ArrayList<SolrInputDocument>(); SolrInputDocument doc1 = new SolrInputDocument(); doc1.addField("id", "2"); doc1.addField("context", "多条数据写入"); doc1.addField("updateTime", new Date()); doc1.addField("sort", 2); docList.add(doc); // 多条数据通过实体类写入 // List<SolrtestBean> beanList = new ArrayList<SolrtestBean>(); // SolrtestBean bean = new SolrtestBean(); // bean.setContext("333333333"); // bean.setId("8"); // beanList.add(bean); try { UpdateResponse rspDocs = client.add(docList); // UpdateResponse rspDocs = client.addBeans(beanList); System.out.println("UpdateResponse result:" + rspDocs.getStatus() + " Qtime:" + rspDocs.getQTime()); UpdateResponse rspcommit = client.commit(); System.out.println( "commit doc to index" + " result:" + rspcommit.getStatus() + " Qtime:" + rspcommit.getQTime()); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 方法描述: [测试更新solr数据]</br> * 初始作者: xiangzhenhai<br/> * 创建日期: 2017年2月15日-上午11:59:30<br/> * 开始版本: 1.0.0<br/> */ public void update() { SolrClient client = new HttpSolrClient(solrURL + "/" + coreName); // 这里只给出单条数据更新测试,多条数据更新与多条数据写入相似,就不写了 // 更新参数说明:set–更新一个字段,add–添加一个字段,inc–在原有值的基础上增加 SolrInputDocument doc = new SolrInputDocument(); Map<String, Object> contextMap = new HashMap<String, Object>(); contextMap.put("set", "更新后的context"); Map<String, Object> sortMap = new HashMap<String, Object>(); sortMap.put("inc", 3); doc.addField("id", "1"); doc.addField("context", contextMap); doc.addField("sort", sortMap); try { UpdateResponse rspDoc = client.add(doc); System.out.println("UpdateResponse result:" + rspDoc.getStatus() + " Qtime:" + rspDoc.getQTime()); UpdateResponse rspcommit = client.commit(); System.out.println( "commit doc to index" + " result:" + rspcommit.getStatus() + " Qtime:" + rspcommit.getQTime()); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 方法描述: [测试删除solr数据]</br> * 初始作者: xiangzhenhai<br/> * 创建日期: 2017年2月15日-下午2:39:38<br/> * 开始版本: 1.0.0<br/> */ public void delete() { try { SolrClient client = new HttpSolrClient(solrURL + "/" + coreName); // 根据id删除solr数据 client.deleteById("1"); // 根据query删除solr数据,这里删除context含有"测试"的solr数据(前提是已经添加中文分词器,否则只会删除context为"测试"的solr数据) client.deleteByQuery("context:测试"); client.commit(); } catch (SolrServerException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
如下: