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