solrj管理索引库
solrj管理索引库
1.1. 什么是solrJ
solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务,如下图:
依赖的jar包:
代码实现:
使用solrj对索引新增、修改、删除
package cn.itcast.solr; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.impl.HttpSolrServer; import org.apache.solr.common.SolrInputDocument; import org.junit.Test; public class IndexManagerTest { //新增、修改 @Test public void testIndexCreate() throws Exception{ //创建和Solr服务端连接 SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //创建solr文档对象 SolrInputDocument doc = new SolrInputDocument(); //域要先定义后使用,还有注意必须要有id主键域 //solr中没有专用的修改方法, 会自动根据id进行查找,如果找到了则删除原来的将新的加入就是修改,如果没找到,将新的直接加入则就是新增 doc.addField("id", "a001"); doc.addField("product_name", "台灯1`111"); doc.addField("product_price", "12.5"); //将文档加入solrServer对象中 solrServer.add(doc); //提交 solrServer.commit(); } //删除 @Test public void testIndexDel() throws Exception{ //创建和Solr服务端连接 SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //根据主键id进行删除 //solrServer.deleteById("a001"); //根据查询删除,这里是删除所有*:* solrServer.deleteByQuery("*:*"); //提交 solrServer.commit(); } }
复杂查询:其中包含查询、过滤、分页、排序、高亮显示等处理
package cn.itcast.solr; import java.util.List; import java.util.Map; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.SolrQuery.ORDER; 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.junit.Test; public class IndexSearchTest { //查询所有: @Test public void testIndexSearch1() throws Exception{ //连接solr服务端 SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //创建solr查询条件对象 SolrQuery solrQuery = new SolrQuery(); //查询所有 solrQuery.setQuery("*:*"); //查询并获取查询响应对象 QueryResponse queryResponse = solrServer.query(solrQuery); //从查询响应中获取查询结果集对象 SolrDocumentList results = queryResponse.getResults(); //打印一共查询到多少条记录,也就是记录总数 System.out.println("=====count====" + results.getNumFound()); //遍历查询结果集 for(SolrDocument doc : results){ System.out.println("============="+doc.get("id")); System.out.println("============="+doc.get("product_name")); System.out.println("============="+doc.get("product_price")); System.out.println("===================================================="); } } //复杂查询, @Test public void testIndexSearch2() throws Exception{ //连接solr服务端 SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr"); //创建solr查询条件对象 SolrQuery solrQuery = new SolrQuery(); //查询关键字输入 solrQuery.setQuery("台灯"); //设置默认搜索域 solrQuery.set("df", "product_keywords"); //设置过滤查询 solrQuery.addFilterQuery("product_price:[1 TO 100]"); //设置排序,这里是降序 solrQuery.setSort("product_price", ORDER.desc); //=======设置分页======== //设置起始条数 solrQuery.setStart(0); //设置查询多少条 solrQuery.setRows(50); //========设置高亮显示======= //高亮默认是关闭的,所以要手动开启 solrQuery.setHighlight(true); //设置需要高亮显示的域 solrQuery.addHighlightField("product_name"); //设置高亮前缀 solrQuery.setHighlightSimplePre("<span style=\"color:red\">"); //设置高亮后缀 solrQuery.setHighlightSimplePost("</span>"); //===================查询并获取查询响应对象===================================== QueryResponse queryResponse = solrServer.query(solrQuery); //从查询响应中获取查询结果集对象 SolrDocumentList results = queryResponse.getResults(); //打印一共查询到多少条记录,也就是记录总数 System.out.println("=====count====" + results.getNumFound()); //遍历查询结果集 for(SolrDocument doc : results){ System.out.println("============="+doc.get("id")); //获取高亮 Map<String, Map<String, List<String>>> highlighting = queryResponse.getHighlighting(); List<String> list = highlighting.get(doc.get("id")).get("product_name"); if(list != null && list.size() > 0){ String hlName = list.get(0); System.out.println("=======high lighting=====" + hlName); } System.out.println("============="+doc.get("product_name")); System.out.println("============="+doc.get("product_price")); System.out.println("===================================================="); } } }